wake-up-neo.net

Kakaofehler 3840 mit JSON (iOS)

Ich versuche, Daten an einen Server zu senden und erhalte die Antwort im JSON-Format. Das Problem ist, dass der Server "success" oder "fail" zurückgeben muss, aber "(null)" zurückgibt.

Hier ist der zurückgegebene Fehler: 

Fehler Domain = NSCocoaErrorDomain Code = 3840 "Die Operation konnte nicht abgeschlossen werden Abgeschlossen. (Cocoa-Fehler 3840.)" (JSON-Text begann nicht mit Array oder Objekt und der Option, Fragmente nicht gesetzt zu lassen.) UserInfo = XXXXXXXXX {NSDebugDescription = JSON-Text begann nicht mit Array oder Objekt und Option, um Fragmente nicht zulassen zu lassen.}

Ist es möglich, dass der Fehler im Serverskript liegt?

Hier ist meine Funktion, um die Daten zu senden und die Antwort zu erhalten:

- (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);
}
38
iosdevrocks

Wenn Sie nicht die Option NSJSONReadingAllowFragments an [NSJSONSerialization JSONObjectWithData:options:error:] übergeben, muss die Antwort vom Server gültige JSON mit einem Container der obersten Ebene sein, der ein Array oder ein Wörterbuch ist. 

zum Beispiel:

    { "response" : "Success" }

P.S . Wenn Sie ein veränderbares Wörterbuch wünschen, müssen Sie auch NSJSONReadingMutableContainers in Ihre Optionen aufnehmen.

34
Stu

Möglicherweise enthält die Antwort Ihres Servers keine gültigen JSON.

Technisch muss das JSON-Objekt entweder mit einem "Array" oder einem "Objekt (Wörterbuch)" beginnen.

Was auch immer Ihr Server zurückgibt, ist es nicht. 

Mit der Option NSJSONReadingAllowFragments können Sie die Verwendung des JSON erzwingen.

durch die Nutzung ,

AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
9
Vandit Mehta

Dieses Problem kann auftreten, wenn Sie auf Ihrem iOS-Gerät mit VPN verbunden sind. 

1
codeburn