0

我有一个 Symfony2 服务器,它使用以下命令从 JQuery 接收 HTTP POST:

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

这很完美,并且在内部将 json 转换为 Request 对象,一旦在 Controller 中,我可以直接使用$this->getRequest()->get('key1')get('key2')获得一些格式良好的 PHP 对象,而无需额外的工作。

所以我有一个完整的应用程序,其中 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,并执行 PHPjson_decode来管理数据。

好的,我可以让它修改我的“API”来检查即将到来的数据类型以及json_decoding它是 JSON 还是getRequestURLEncode 的东西。

但是在做这种解决方法之前,是否有一种简单的方法可以进行JQuery并行转换,获取链接NSDictionaries并发NSArrays送到URLEncoded服务器,application/x-www-form-urlencoded以便始终以getRequest()->get('key1')样式获取服务器中的数据?

4

1 回答 1

1

这很完美,并且在内部转换了 Request 对象中的 json,一旦在 Controller 中,我可以直接使用 $this->getRequest()->get('key1') 或 get('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){},
});
于 2013-06-18T08:30:57.483 回答