【发布时间】:2014-01-24 23:51:32
【问题描述】:
我遇到了与here 讨论的问题类似的问题。
我正在尝试将 JSON 发布到服务器。
这是应该工作但不能工作的Objective-C代码。我在响应对象中得到一个空数组,不知道为什么:
AFHTTPRequestOperation * operation = [manager POST:uploadScriptUrl
parameters:mutableJSON
success:^(AFHTTPRequestOperation * operation, id responseObject) {
successBlock(operation, responseObject);
}
failure:^(AFHTTPRequestOperation * operation, NSError * error) {
failureBlock(operation, error);
}];
这段代码(改编自我用来上传图片的代码)KIND OF 有效。我知道这绝对不是经过批准的方法:
AFHTTPRequestOperationManager * manager = [AFHTTPRequestOperationManager manager];
AFJSONRequestSerializer * requestSerializer = [AFJSONRequestSerializer serializer];
[requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
manager.requestSerializer = requestSerializer;
AFHTTPRequestOperation * operation = [manager POST:uploadScriptUrl
parameters:mutableJSON //passed in
constructingBodyWithBlock:^(id <AFMultipartFormData> formData) {
//Do nothing
}
success:^(AFHTTPRequestOperation * operation, id responseObject) {
successBlock(operation, responseObject);
}
failure:^(AFHTTPRequestOperation * operation, NSError * error) {
failureBlock(operation, error);
}];
它将我的 JSON 发布到服务器,但在制定请求的过程中,JSON 被破坏了。
它是这样开始的:
{
"key1": [
{
"dictionary1": {
"param1": "value1",
"param2": "value2",
"array1A": [
"value1",
"value2"
],
"array1B": [
"value1",
"value2"
]
}
}
]
}
这是 AFNetworking 发送到服务器的内容:
{
"key1": [
{
"dictionary1": {
"array1A": [
"value1"
]
}
},
{
"dictionary1": {
"array1A": [
"value2"
]
}
},
{
"dictionary1": {
"array1B": [
"value1"
]
}
},
{
"dictionary1": {
"array1B": [
"value2"
]
}
},
{
"dictionary1": {
"param1": "value1"
}
},
{
"dictionary1": {
"param2": "value2"
}
}
]
}
这是 Charles 为请求显示的内容。在服务器接触数据之前,您可以看到请求中的 JSON 结构已经发生了怎样的变化。
这是我在服务器上使用的 PHP。现在很简单:
<?php
header('Content-type: application/json'); //Not sure if this is needed.
$json_string = json_encode($_POST);
header("HTTP/1.0 200 OK");
echo $json_string;
?>
所以,说了这么多,下面是我的问题:
AFNetworking 是否处理嵌套的 JSON 数组?在this page Mattt 上说:“你所描述的结构不能用查询字符串编码来确定地表示。”我正在使用 POST,因此不涉及查询字符串。但也许 POST 数据也存在限制?
我也很好奇为什么包含
constructingBodyWithBlock的较长的AFNetworking 调用成功而较短的调用失败。但是,这个答案对我来说不太重要。较长的方法几乎可以工作,如果它返回与我发送的相同 JSON,我会很乐意使用它。
谢谢大家!
【问题讨论】:
标签: php ios objective-c afnetworking afnetworking-2