我有一个Symfony2服务器,它使用以下命令从JQuery接收HTTP POST:
var myJSON = {key1: "value1", key2: ["value2", "value3"]};
$.post(myURL, {myJSON}, function(json){}, "json");
这很好用,并在内部转换一个Request对象中的json,一旦在Controller中,我可以直接使用$this->getRequest()->get('key1')
或get('key2')
获得一些格式良好的PHP对象而无需额外的工作。< / p>
所以我有一个完整的应用程序,JQuery和Symfony2以这种方式工作。
现在我需要使用iPhone SDK和Objective C开发移动客户端。
但是我发现它所做的所有示例都发送JSON并使用json_decode将其转换为PHP对象一次在服务器中。这些例子使用了这段代码:
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_decoding
如果是JSON,还是getRequest
,如果它是URLEncode。
但在执行此变通办法之前,没有一种简单的方法可以获得JQuery
并行转换,将链接的NSDictionaries
和NSArrays
设为URLEncoded
并发送给服务器为application/x-www-form-urlencoded
以使服务器中的数据始终采用getRequest()->get('key1')
样式?
答案 0 :(得分:1)
这很好用,并在内部转换请求中的json 对象,一旦在控制器中,我可以直截了当 $ this-&gt; getRequest() - &gt; get('key1')或get('key2')获得一些好的 形成了PHP对象,没有额外的工作。
Symfony不会在Request对象中内部转换你的json! 如果您想要一种处理数据的方法,则只需要使用一种类型(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){},
});