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);
}
Ответы
Ответ 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.