2013-01-05 9 views
36

Próbuję wysłać dane do serwera i otrzymać odpowiedź w formacie JSON. Problem polega na tym, że serwer musi zwrócić "sukces" lub "niepowodzenie", ale zwraca "(null)".Błąd kakao 3840 przy użyciu JSON (iOS)

Oto zwrócił błąd:

Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (JSON text did not start with array or object and option to allow fragments not set.) UserInfo=XXXXXXXXX {NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}

Czy to możliwe, że jest błąd w skrypcie serwera?

Oto mój funkcja wysyłania danych i otrzymujemy odpowiedź:

- (void) putData:(NSString *)parameter valor:(NSString *)valor { 

    NSString *rawString = [NSString stringWithFormat:@"%@=%@", parameter, valor]; 
    NSData *data = [rawString dataUsingEncoding:NSUTF8StringEncoding]; 
    NSURL *url = [NSURL URLWithString:@"http://www.xxx.xxx/xxx.php"]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 
    [request setHTTPMethod:@"PUT"]; 
    [request setHTTPBody:data]; 
    NSURLResponse *response; 
    NSError *error; 
    NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
    NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error]; 
    NSLog(@"responseData: %@ error: %@", json, error); 
} 

Odpowiedz

31

ile zdasz opcję NSJSONReadingAllowFragments do [NSJSONSerialization JSONObjectWithData:options:error:] odpowiedź od serwera musi być ważny JSON z kontenerem najwyższego poziomu, który jest tablicą lub słownik.

na przykład:

{ "response" : "Success" } 

PS: Jeśli chcesz wymieniać słownik, musisz również uwzględnić w opcjach NSJSONReadingMutableContainers.

+0

Co mówisz, jest to, że może być pomyłka w kodzie PHP? – iosdevrocks

+0

Jestem prawdopodobnie JSONP, więc JSON, ale zawinięty w metodę o nazwie coś podobnego do callback (_wszystkie twoje JSON tutaj); – RickiG

+0

@iosdevrocks, w moim przypadku problem był w php code – Alex

1

Ten problem można uzyskać, jeśli masz połączenie z siecią VPN na urządzeniu z systemem iOS.

8

Możliwe, że odpowiedź z twojego serwera nie zawiera prawidłowego JSON.

Technicznie, obiekt JSON musi zaczynać się od "tablicy" lub "obiektu (słownika)".

Niezależnie od tego, co powróci serwer, nie jest.

Można również wymusić użycie JSON bez względu na użycie opcji NSJSONReadingAllowFragments.

za pomocą,

AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments]; 
+1

Powinieneś także spróbować AFHTTPResponseSerializer (zamiast AFJSONResponseSerializer). Mi to pasuje –

Powiązane problemy