Подтвердить что ты не робот

Cocoa ошибка 3840 с использованием JSON (iOS)

Я пытаюсь отправить данные на сервер и получить ответ в формате JSON. Проблема в том, что сервер должен возвращать "успех" или "сбой", но возвращает "(null)".

Здесь возвращается ошибка:

Ошибка домена = NSCocoaErrorDomain Code = 3840 "Операция не может быть завершено. (Cocoa ошибка 3840.)" (текст JSON не начинался с массива или объект и параметр, позволяющий не создавать фрагменты.) UserInfo = XXXXXXXXX {NSDebugDescription = текст JSON не начинался с массива или объекта и возможность разрешить фрагменты.}

Возможно ли, что ошибка на сервере script? Есть идеи? Спасибо!

Здесь моя функция для отправки данных и получения ответа:

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

    NSString *rawString = [NSString stringWithFormat:@"%@=%@", parametre, 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);
}
4b9b3361

Ответ 1

Если вы не передадите опцию NSJSONReadingAllowFragments на [NSJSONSerialization JSONObjectWithData:options:error:], ответ с сервера должен быть действительным JSON с контейнером верхнего уровня, который является массивом или словарем.

например:

    { "response" : "Success" }

P.S. Если вы хотите использовать изменяемый словарь, вы также должны включить NSJSONReadingMutableContainers в свои параметры.

Ответ 2

Возможно, что ответ с вашего сервера не содержит допустимого JSON.

Технически, объект JSON должен начинаться с "массива" или "объекта (словаря)".

Итак, что бы ни возвращал ваш сервер, нет.

И вы можете принудительно использовать JSON, используя параметр NSJSONReadingAllowFragments.

используя

AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];

Ответ 3

Вы можете получить эту проблему, если вы подключены к VPN на своем устройстве iOS.