У меня есть сервер Symfony2, который принимает HTTP-сообщения с JQuery с помощью:Сделать iPhone отправить URLEncoded строку вместо JSON
var myJSON = {key1: "value1", key2: ["value2", "value3"]};
$.post(myURL, {myJSON}, function(json){}, "json");
Это отлично работает и внутренне преобразует JSON в объект запроса, что, как только в контроллере , Я могу получить прямо с $this->getRequest()->get('key1')
или get('key2')
, получая некоторые хорошо сформированные объекты PHP без дополнительной работы.
Итак, у меня есть полное приложение с JQuery и Symfony2, работающими таким образом.
Теперь мне нужно разработать мобильный клиент с помощью iPhone SDK и Objective C.
Но всех примеры я нахожу, чтобы сделать это отправить JSON и превратить его в PHP объектов один раз на сервере с помощью json_decode. Эти примеры используют этот кусок кода:
NSArray *myArray = [NSArray arrayWithObjects: @"Value2", @"Value3", nil];
NSDictionary *myDict = [NSDictionary dictionaryWithObjectsAndKeys: @"Value1", @"key1", myArray, @"Value2"];
NSData* requestData = [NSJSONSerialization dataWithJSONObject:myDict options:NSJSONWritingPrettyPrinted error:&error];
NSLog(@"JSON string:%@", [[NSString alloc] initWithData:requestData encoding:NSUTF8StringEncoding]); // To check that the conversion to JSON is indeed being performed perfectly!!
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"XMLHttpRequest" forHTTPHeaderField:@"X-Requested-With"];
[request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody: requestData];
Это отправляет непосредственно данные в формате JSON на сервер и $this->getRequest()->get('key1')
возвращает нуль. Этот подход предполагает получить этот JSON, который находится в теле контента HTTP-запроса, и сделать PHP json_decode
для управления данными.
Хорошо, я могу заставить его модифицировать свой «API», чтобы проверить, какие данные идут, и json_decoding
, если это JSON или getRequest
вещь, если это URLEncode.
Но прежде чем делать это обходной путь, не существует простой способ получить JQuery
параллельное преобразование получать связанный NSDictionaries
и NSArrays
быть URLEncoded
и отправляется на сервер как application/x-www-form-urlencoded
, чтобы получить данные на сервере всегда в getRequest()->get('key1')
стиль?
Еще раз спасибо !! Итак, у меня есть одна из этих двух проблем: 1-й -> Изменить все мои вызовы AJAX (около 200) и json_decode request-> getContent(). 2nd -> Как вы сказали в обоих ответах, чтобы преобразовать мои структуры данных Cocoa (иногда такие сложные, как связанные NSDictionarys и NSArrays) в строки с URLEncoded. Я бы предпочел второй. Но я не нахожу информацию о том, как URLEncode более сложные структуры какао. Такие, как не так просто, как словарь с некоторыми парами ключ/значения, но вложенные NSDictionary и NSArrays. Любой простой способ сделать это? Еще раз спасибо! – ElPiter
Здесь мы идем! Взгляните на этот новый вопрос: http://stackoverflow.com/questions/17166931/objective-c-how-to-convert-nested-nsdictionarys-and-nsarrays-to-urlencoded-stri – ElPiter