2015-05-14 11 views
5

Odpowiedź AFNetworking failure blok jest wywoływany, gdy otrzymam kod stanu 200. Jak mogę zamiast tego wywołać success?Blokada odpowiedzi AFNetworking jest wywoływana zamiast bloku powodzenia

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]); 
    }]; 

Odpowiedz

5

Spójrz na wartość error. Pokaże ci, dlaczego połączenie nie powiodło się. "Niepowodzenie" w tym kontekście nie ma nic wspólnego z kodem statusu. Powracanie "404" jest nadal "sukcesem". Niepowodzenie oznacza, że ​​nie można ukończyć operacji.

+0

Dzięki za wskazanie, że obecnie ... Webservice miał błąd w contenttype jako text/html .... teraz zmieniony na application/json –

1

Uruchamiam ten kod i szukam go.

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]); 
    }]; 

responce jest:

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

Może to być praca dla Ciebie.

+0

to powoduje awarię aplikacji ... Dzięki za próbę –

+0

możesz wysłać błąd zawieszający? – Lalji

+0

hej teraz ten kod jest działaniem. – Lalji

2

użycie acceptableStatusCodes następująco:

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

Jeśli sprawdzenie błędu w bloku awarii to wyraźnie powiedzieć, że invalid content type. Trzeba ustawić typ zawartości kierownika następująco

manager.requestSerializer = [AFJSONRequestSerializer serializer]; 
+1

Prawda, ale to rozwiązanie spowodowało awarię mojej aplikacji, więc wprowadzono zmiany po stronie serwera ... Dzięki, –

0

spróbować to

manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 

iw bloku sukces

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

, możesz mi powiedzieć, jaka jest różnica między twoją a Inder Kumar Rathore odpowiedzią? –

+0

Mówi AFJSONRequestSerializer i sugeruje AFHTTPResponseSerializer. bardziej edytowane, aby uzyskać wyniki – vaibby

Powiązane problemy