2013-06-18 29 views
0

url編碼字符串我有利用JQuery的接收HTTP職位Symfony2的服務器:讓iPhone發送的,而不是JSON

var myJSON = {key1: "value1", key2: ["value2", "value3"]}; 
$.post(myURL, {myJSON}, function(json){}, "json"); 

這完美的作品,並在內部轉換在Request對象的JSON,一旦在控制器,我可以直接用$this->getRequest()->get('key1')get('key2')獲得一些格式良好的PHP對象,而不需要額外的工作。

所以我有一個完整的應用程序與JQuery和Symfony2這樣工作。

現在我需要開發使用iPhone SDK和Objective C.

但是,所有的例子我發現到PHP使用json_decode在服務器對象做一次它發送JSON,並將其轉換移動客戶端。這些實施例使用此片的代碼:

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')返回null。這種方法預計會收到HTTP請求的內容主體中的JSON,並執行PHP json_decode來管理數據。

好的,我可以修改我的「API」來檢查是什麼類型的數據,如果是JSON則爲json_decoding,如果是URLEncode則爲getRequest

但在此之前這樣做的解決方法,是不是有一種簡單的方法來得到一個JQuery並行轉換得到的鏈接NSDictionariesNSArraysURLEncoded併發送至服務器application/x-www-form-urlencoded服務器獲取數據總是在getRequest()->get('key1')樣式?

回答

1

這完美的作品,並在內部轉換的請求 對象,一旦在控制,我可以簡單的用JSON $這個 - > Request()方法 - >獲取(「鍵1」)或得到( 'key2')獲得一些好的 形成了PHP對象,沒有額外的工作。

Symfony不在內部將您的json轉換爲Request對象! 如果你想要一種處理數據的方法,你只需要發送一種類型的數據(json或x-www-url-encoded)。我在前面的問題中寫過你,你可以編碼iOS以x-www-url-encoded發送數據,但是你也可以在jQuery.post和iOS中發送JSON。然後,你必須實現只:

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

要在JS發送JSON數據,你需要下面的代碼:

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

再次感謝您!所以我現在有這兩個問題之一:1st - >更改我所有的AJAX調用(大約200)和json_decode request-> getContent()。第二 - >正如你在這兩個答案中所說的,將我的Cocoa數據結構(有時與鏈接的NSDictionarys和NSArrays一樣複雜)轉換爲URLEncoded字符串。我更喜歡第二個。但是我沒有找到關於如何更復雜的Cocoa結構的信息。比如不像帶有一些鍵/值對的字典那樣簡單,但是嵌套NSDictionary和NSArrays。任何一種簡單的方法來做到這一點?再次感謝你!! – ElPiter

+0

我們走吧!看看這個新問題:http://stackoverflow.com/questions/17166931/objective-c-how-to-convert-nested-nsdictionarys-and-nsarrays-to-urlencoded-stri – ElPiter

相關問題