Intereting Posts
Получить широтную широту, основанную на дистанции и степени добавление переменной php в значение формы HTML Показать изображение на основе даты в PHP Контролируйте количество результатов вызова API Magento отправлять несколько данных изображения с помощью текстового поля с углового контроллера данные одной формы, различные действия по двум отдельным кнопкам отправки Проблема Weird SimpleXML – не может ссылаться на узлы по имени? как запрашивать группу и отличать лимит в MongoDB PHP codeigniter? PHP – преобразование XML в массив в PHP – синтаксический анализ мыла xml в php и сохранение его в базе данных PHP: инструкция «или» при сбое инструкции: как выбросить новое исключение? mySQL: объединение трех таблиц – как? preg_match_all возвращает только первое совпадение Получить статус выхода из скрипта php внутри сценария оболочки Привязка параметра построителя запроса Laravel Как получить результат двух операторов select в одной строке?

AFNetworking 2.0 POST, ошибка Cocoa 3840 (текст JSON не начинался с массива …)

Я пытаюсь вызвать api.php на моем локальном сервере (используя MAMP). Вызывается сервер api.php на стороне сервера, но содержимое _POST внутри php-кода содержит следующую ошибку:

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 = 0x15d7bdd0 {NSDebugDescription = JSON text did not start with array or object and option to allow fragments not set.} 

Мое приложение, которое пытается отправить запрос JSON POST на api.php, – это приложение iOS, использующее AFNetworking 2

Это мой код запроса:

 - (void)postUpdateRequest { if (!dataModel) dataModel = [[DataModel alloc] init]; NSDictionary *params = @{@"foo": @"bar2"}; NSLog(@"%@",params); /* NSDictionary *params = @{@"cmd":@"update", @"user_id":[dataModel userId], @"token":[dataModel deviceToken] };//@"ip_address":[dataModel getIPAddress]};*/ AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; // manager.requestSerializer = [AFJSONRequestSerializer serializer]; [manager POST:ServerApiURL parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"JSON: %@", responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }]; } 

Я смотрел по всему Интернету, но не могу найти ответ по моей конкретной проблеме. Независимо от того, что я делаю, я получаю ту же ошибку.

Почему мой JSON не отформатирован должным образом? Я также не могу найти способ понюхать то, что JSON я действительно отправляю.

Спасибо.

Related of "AFNetworking 2.0 POST, ошибка Cocoa 3840 (текст JSON не начинался с массива …)"

Когда вы используете API, как в вашем примере, ваше HTTP-сообщение будет составлено с помощью приложения Content-Type application/x-www-form-urlencoded . Внутри ваш словарь параметров закодирован AFN (хотя и не совсем корректным, как указано w3c), и устанавливается как тело запроса.

Поскольку вы не указали заголовок Accept , сервер может выбрать тип контента для возможных ответов (если есть).

Когда вы получаете ответ, вам нужно всегда проверять код состояния HTTP и тип содержимого тела ответа (если есть).

Вероятно, сервер вернул код состояния, указывающий на какую-то проблему, и тело ответа, содержащее «ответ об ошибке» в виде определенного типа контента, который вы ожидаете (например, он вернул текст / html).

Вы можете использовать smth like wireshark ( http://www.wireshark.org/ ) во время работы приложения в симуляторе или на устройстве, подключенном через общий wifi к mac, на котором вы запускаете whireshark для отслеживания фактических запросов и ответов.

Это работает для меня:

  AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; AFJSONRequestSerializer *requestSerializer = [AFJSONRequestSerializer serializer]; [requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"]; manager.requestSerializer = requestSerializer; [manager POST:URLString parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"JSON: %@", responseObject); [MBProgressHUD hideAllHUDsForView:self.view animated:YES]; } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); [MBProgressHUD hideAllHUDsForView:self.view animated:YES]; }];