2013-06-18 3 views
0

У меня есть сервер 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

Это отлично работает и внутренне преобразует JSON в запросе объекта, который, как только в контроллере, я могу получить просто с $ this-> GetRequest() -> получить («key1») или получить ('key2'), получив некоторый нуль сформировал объекты PHP без дополнительной работы.

Symfony не внутренне конвертирует ваш json в объект Request! Если вам нужен один способ работы с данными, вам необходимо отправить данные только одним типом (json или x-www-url-encoded). Я писал вам в предыдущем вопросе, что вы можете кодировать iOS для отправки данных с кодировкой x-www-url, но вы также можете отправить JSON в jQuery.post и из iOS. И тогда вы должны реализовать только:

$data = json_decode($this->getRequest()->getContent()); 

Чтобы отправить данные JSON в вашем JS вам нужен следующий код:

$.ajax({ 
    type: "POST", 
    url: myURL, 
    data: JSON.stringify(myJSON), 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(json){}, 
}); 
+0

Еще раз спасибо !! Итак, у меня есть одна из этих двух проблем: 1-й -> Изменить все мои вызовы AJAX (около 200) и json_decode request-> getContent(). 2nd -> Как вы сказали в обоих ответах, чтобы преобразовать мои структуры данных Cocoa (иногда такие сложные, как связанные NSDictionarys и NSArrays) в строки с URLEncoded. Я бы предпочел второй. Но я не нахожу информацию о том, как URLEncode более сложные структуры какао. Такие, как не так просто, как словарь с некоторыми парами ключ/значения, но вложенные NSDictionary и NSArrays. Любой простой способ сделать это? Еще раз спасибо! – ElPiter

+0

Здесь мы идем! Взгляните на этот новый вопрос: http://stackoverflow.com/questions/17166931/objective-c-how-to-convert-nested-nsdictionarys-and-nsarrays-to-urlencoded-stri – ElPiter

Смежные вопросы