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
並行轉換得到的鏈接NSDictionaries
和NSArrays
是URLEncoded
併發送至服務器application/x-www-form-urlencoded
服務器獲取數據總是在getRequest()->get('key1')
樣式?
再次感謝您!所以我現在有這兩個問題之一:1st - >更改我所有的AJAX調用(大約200)和json_decode request-> getContent()。第二 - >正如你在這兩個答案中所說的,將我的Cocoa數據結構(有時與鏈接的NSDictionarys和NSArrays一樣複雜)轉換爲URLEncoded字符串。我更喜歡第二個。但是我沒有找到關於如何更復雜的Cocoa結構的信息。比如不像帶有一些鍵/值對的字典那樣簡單,但是嵌套NSDictionary和NSArrays。任何一種簡單的方法來做到這一點?再次感謝你!! – ElPiter
我們走吧!看看這個新問題:http://stackoverflow.com/questions/17166931/objective-c-how-to-convert-nested-nsdictionarys-and-nsarrays-to-urlencoded-stri – ElPiter