2015-05-14 2 views
5

Ответ AFNetworking failure блок вызывается, когда я получаю код состояния 200. Как я могу вместо этого называть success?Вызывается блок сбоя ответа AFNetworking вместо блока успеха

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
[manager GET:@"http://128.199.94.58/test/bt/client_token.php" parameters:nil 
    success:^(AFHTTPRequestOperation *operation, id responseObject) { 
     self.clientToken = responseObject[@"customerID"]; 
     NSLog(@"Client Token received."); 
    } 
    failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     // Handle failure communicating with your server 
     NSLog(@"Client Token request failed.%@",operation.responseString); 
     NSLog(@"error code %ld",(long)[operation.response statusCode]); 
    }]; 

ответ

5

Посмотрите на значение error. Он расскажет вам, почему соединение не удалось. «Сбой» в этом контексте не имеет никакого отношения к коду состояния. Возвращение «404» по-прежнему является «успехом». Отказ означает, что вы не смогли завершить операцию.

+0

Спасибо за указание, что из ... вебсервис была ошибка в contenttype как text/html .... теперь изменено на приложение/json –

1

Я запустил этот код и нахожу работу.

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 
[manager GET:@"http://128.199.94.58/test/bt/client_token.php" parameters:nil 
    success:^(AFHTTPRequestOperation *operation, id responseObject) { 
     NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseObject 
                   options:kNilOptions 
                   error:nil]; 
     self.clientToken = json[@"customerID"]; 
     NSLog(@"Client Token received."); 
    } 
    failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     // Handle failure communicating with your server 
     NSLog(@"Client Token request failed.%@",operation.responseString); 
     NSLog(@"error code %ld",(long)[operation.response statusCode]); 
    }]; 

Быстродействие является:

json: 
{ 
    customerID = "eyJ2ZXJzaW9uIjoyLCJhdXRob3JpemF0aW9uRmluZ2VycHJpbnQiOiJhMjg2OGVjY2FmZjNjMTQ0M2Y4MTg2MjQ4NDFhZDIyZGM3MWFhOTQ0MmFiMTY2NWVlNWY1YjJkODdiOTVhYzBjfGNyZWF0ZWRfYXQ9MjAxNS0wNS0xNFQxMzoyMDowNi45NjE2NDQxNzArMDAwMFx1MDAyNm1lcmNoYW50X2lkPXpxZDlkcGpmZmRzazd4bnlcdTAwMjZwdWJsaWNfa2V5PWRoeTdqeGt6Z3Y4d3dkcGoiLCJjb25maWdVcmwiOiJodHRwczovL2FwaS5zYW5kYm94LmJyYWludHJlZWdhdGV3YXkuY29tOjQ0My9tZXJjaGFudHMvenFkOWRwamZmZHNrN3hueS9jbGllbnRfYXBpL3YxL2NvbmZpZ3VyYXRpb24iLCJjaGFsbGVuZ2VzIjpbImN2diJdLCJlbnZpcm9ubWVudCI6InNhbmRib3giLCJjbGllbnRBcGlVcmwiOiJodHRwczovL2FwaS5zYW5kYm94LmJyYWludHJlZWdhdGV3YXkuY29tOjQ0My9tZXJjaGFudHMvenFkOWRwamZmZHNrN3hueS9jbGllbnRfYXBpIiwiYXNzZXRzVXJsIjoiaHR0cHM6Ly9hc3NldHMuYnJhaW50cmVlZ2F0ZXdheS5jb20iLCJhdXRoVXJsIjoiaHR0cHM6Ly9hdXRoLnZlbm1vLnNhbmRib3guYnJhaW50cmVlZ2F0ZXdheS5jb20iLCJhbmFseXRpY3MiOnsidXJsIjoiaHR0cHM6Ly9jbGllbnQtYW5hbHl0aWNzLnNhbmRib3guYnJhaW50cmVlZ2F0ZXdheS5jb20ifSwidGhyZWVEU2VjdXJlRW5hYmxlZCI6ZmFsc2UsInBheXBhbEVuYWJsZWQiOnRydWUsInBheXBhbCI6eyJkaXNwbGF5TmFtZSI6InVzYyIsImNsaWVudElkIjpudWxsLCJwcml2YWN5VXJsIjoiaHR0cDovL2V4YW1wbGUuY29tL3BwIiwidXNlckFncmVlbWVudFVybCI6Imh0dHA6Ly9leGFtcGxlLmNvbS90b3MiLCJiYXNlVXJsIjoiaHR0cHM6Ly9hc3NldHMuYnJhaW50cmVlZ2F0ZXdheS5jb20iLCJhc3NldHNVcmwiOiJodHRwczovL2NoZWNrb3V0LnBheXBhbC5jb20iLCJkaXJlY3RCYXNlVXJsIjpudWxsLCJhbGxvd0h0dHAiOnRydWUsImVudmlyb25tZW50Tm9OZXR3b3JrIjp0cnVlLCJlbnZpcm9ubWVudCI6Im9mZmxpbmUiLCJ1bnZldHRlZE1lcmNoYW50IjpmYWxzZSwiYnJhaW50cmVlQ2xpZW50SWQiOiJtYXN0ZXJjbGllbnQzIiwibWVyY2hhbnRBY2NvdW50SWQiOiI2ejl3eGtkanlyNnQzbmg1IiwiY3VycmVuY3lJc29Db2RlIjoiVVNEIn0sImNvaW5iYXNlRW5hYmxlZCI6ZmFsc2UsIm1lcmNoYW50SWQiOiJ6cWQ5ZHBqZmZkc2s3eG55IiwidmVubW8iOiJvZmYifQ=="; 
} 

Это может быть работа для вас.

+0

это сбой приложения ... Спасибо за попытку –

+0

вы можете отправить ошибку сбой? – Lalji

+0

эй сейчас этот код - работа. – Lalji

2

использование acceptableStatusCodes следующим образом:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
manager.responseSerializer = [AFJSONResponseSerializer serializer]; 
manager.requestSerializer = [TimeoutAFJSONRequestSerializer serializer]; 
NSMutableIndexSet* codes = [[NSMutableIndexSet alloc] init]; 
[codes addIndex: 200]; 
manager.responseSerializer.acceptableStatusCodes = codes; 

[manager GET:urlString parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) 
{ 


} failure:^(AFHTTPRequestOperation *operation, NSError *error) 
{ 
}]; 
0

Если вы проверяете ошибку в блоке отказа ясно сказать, что invalid content type. Вы должны установить тип содержимого менеджера следующим

manager.requestSerializer = [AFJSONRequestSerializer serializer]; 
+1

Правда, но это решение сбивало мое приложение, так что внесены изменения на стороне сервера ... Спасибо –

0

попробовать это

manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 

и в успехе блока

success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:manager.responseData options:kNilOptions error:nil]; 
    self.clientToken = dic[@"customerID"]; 
    NSLog(@"Client Token received."); 
} 
+1

может у вас сказать, какая разница между твоей и Inder Kumar Rathore ответ ?? –

+0

Он говорит, что AFJSONRequestSerializer и i m предлагают AFHTTPResponseSerializer. больше отредактировано для получения результатов – vaibby

Смежные вопросы