gpt4 book ai didi

objective-c - 让 iPhone 发送 URLEncoded 字符串而不是 JSON

转载 作者:行者123 更新时间:2023-12-03 17:53:48 25 4
gpt4 key购买 nike

我有一个 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 对象。

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

好的,我可以修改我的“API”来检查即将到来的数据类型,如果是 JSON,则检查 json_decoding ;如果是 URLEncode,则检查 getRequest 内容.

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

最佳答案

This works perfect and internally converts the json in a Request object that, once in the Controller, I can get straightforward with $this->getRequest()->get('key1') or get('key2') obtaining some well formed PHP objects with no additional work.

Symfony 不会在请求对象中内部转换您的 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){},
});

关于objective-c - 让 iPhone 发送 URLEncoded 字符串而不是 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17163343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com