سؤال

لقد قمت بإنشاء فئة فرعية من AFHTTPClient وأحاول إرسال بعض معلمات JSON إلى الخادم.

ومع ذلك، يستجيب الخادم بنوع المحتوى المتوقع

{(
    "text/json",
    "application/json",
    "text/javascript"
)}, got application/xml

وفق الأسئلة الشائعة حول شبكة AF

إذا كنت تستخدم AFHTTPClient، فقم بتعيين خاصيةparameterEncoding إلى AFJSONParameterEncoding.أي طريقة على عميل HTTP هذا مع وسيطة معلمات ستقوم الآن بتشفير الكائن الذي تم تمريره إلى سلسلة JSON وتعيين نص HTTP ورأس نوع المحتوى بشكل مناسب.

لقد فعلت ذلك هنا ولكن يبدو أن الخادم لا يتعرف على رؤوس المحتوى.هل يعرف أحد الحل المحتمل؟

هنا هي الطريقة:

- (void)getCompanyDataWithString:(NSString*)companySearchQuery 
      finish:(LBMarkitAPIRequestCompletionBlock)finishBlock
{
    [self registerHTTPOperationClass:[AFJSONRequestOperation class]];
    [self setParameterEncoding:AFJSONParameterEncoding];

    NSDictionary *params = [NSDictionary dictionaryWithObject:
        companySearchQuery forKey:@"input"];
    NSMutableURLRequest *searchQueryRequest = [self requestWithMethod:@"GET"
        path:kMarkitCompanyURL parameters:params];

    AFJSONRequestOperation *searchRequestOperation = [AFJSONRequestOperation 
        JSONRequestOperationWithRequest:searchQueryRequest 
        success:^(NSURLRequest *request, NSHTTPURLResponse *response, id json) 
        {
            NSLog(@"Response: %@", response);
            NSLog(@"JSON: %@",json);
            NSMutableArray *results = [NSMutableArray array];

            NSError *anError = [[NSError alloc] init];
            if ([json objectForKey:@"Message"]) 
            {
                NSString *message = [json objectForKey:@"Message"];
                anError = [[NSError alloc] initWithDomain:message
                                                     code:100 
                                                 userInfo:nil];
            }

            // Need some error handling code here
            for (id item in json) 
            {
                NSString *aName = [item objectForKey:@"Name"];
                NSString *aSymbol = [item objectForKey:@"Symbol"];
                NSString *anExchange = [item objectForKey:@"Exchange"];

                LBCompany *aCompany = [[LBCompany alloc] initWithName:aName 
                    Symbol:aSymbol Exchange:anExchange];
                [results addObject:aCompany];
            }
            // Need to run the passed in block after JSON 
            // Request Operation succeeds

            finishBlock(results,anError);
          }
        failure:^(NSURLRequest *request, NSHTTPURLResponse *response, 
            NSError *error, id JSON)
        {
            NSLog(@"request failed: %@",[error localizedDescription]);
            NSLog(@"Response: %@",response);
            NSLog(@"JSON: %@",JSON);
        }];

    [searchRequestOperation start];
    NSLog(@"JSON operation started");
}
هل كانت مفيدة؟

المحلول

كانت المشكلة تتعلق بتنسيق عنوان URL.لم ألاحظ تفاصيل تنفيذ واجهة برمجة التطبيقات (API) التي جعلت إرسال معلمات الاستعلام أمرًا ضروريًا وكذلك تحديد إخراج JSON في URI.

لم تكن هناك مشاكل فيما يتعلق بشبكة AF.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top