24

AFJSONRequestOperation用来请求服务器并解析返回的 JSON 响应,但是在解析时,我收到了这个错误:

NSDebugDescription = "JSON text did not start with array or object and option to allow fragments not set.";

我检查了 API,它返回 JSON 数据:

header('Content-type: text/json');
$arr[] = array("Message" => "update succeeded");
echo '{"Result":'.json_encode($arr).'}';

知道如何解决吗?

编辑

我尝试从浏览器调用 API 并将请求包含在 url 中,因此我得到了有效的 JSON 响应:

{"Result":[{"Message":"update succeeded"}]}
4

7 回答 7

1

首先,json_encode整个对象,而不是分解成碎片。

其次,除非 $arr 包含多个元素(从上面的示例中不清楚),否则它应该被初始化为:

$arr = array("Message" => "update succeeded");

我仍然不确定这里还有什么问题。您应该回显您的应用程序正在接收什么,这应该表明问题。

于 2015-05-16T10:56:24.943 回答
1

检查您是否在 API 的基本 URL 之前添加了 /api/

http:// someurl / yourBasrUrl /api/apiName

于 2016-02-18T13:38:34.587 回答
1

要做出有效的 json 响应,您的代码应如下所示:

$response = array(
    "Result" => array(
        "Message" => "update succeeded"
    )
)

echo json_encode($response);
于 2017-08-26T10:31:37.923 回答
1

如果您需要读取片段 json,您可以使用.allowFragments如下选项:

JSONSerialization.jsonObject(with: someData, options: .allowFragments)
于 2018-07-03T21:33:10.223 回答
1

请试试这个:

let manager = AFHTTPSessionManager(baseURL: NSURL("Base URL"))
manager.requestSerializer = AFJSONRequestSerializer()
manager.responseSerializer = AFJSONResponseSerializer()

 let params = [
    "foo": "bar"
]

manager.POST("API url", parameters: params, 

success: {
    (task: NSURLSessionDataTask!, responseObject: AnyObject!) in
        print("success") 
}, 

failure: {
    (task: NSURLSessionDataTask!, error: NSError!) in
        print("error")
})
于 2019-10-03T06:03:41.183 回答
1

请使用可接受的内容类型。在您的网络服务中,这应该只是纯文本。

这是我的快速代码并已修复:

    let manager = AFHTTPRequestOperationManager()

    manager.requestSerializer=AFJSONRequestSerializer()
    manager.responseSerializer = AFHTTPResponseSerializer();

    manager.GET(

        baseURL + (webServiceType as String) + secureParam,
        parameters:[:],

        success:
        { (operation: AFHTTPRequestOperation!,
            responseObject: AnyObject!) in
            completion(obj: responseObject)
        },
        failure:
        { (operation: AFHTTPRequestOperation!,
            error: NSError!) in
            completion(obj: nil)
    })
于 2015-12-29T13:35:42.040 回答
0

首先,您的 API 返回不正确的Content-Type. JSON 数据的正确内容类型是application/json. 这在使用第三方库时可能会发生冲突。

其次,您不应该“手动”生成 json 字符串。总共 API 应该修改为面对:

header('Content-type: application/json');
$arr[] = array("Message" => "update succeeded");
echo json_encode(array('Result' => $arr));

最后一击并非最不重要。还有一件可能的事情:您的 api PHP 脚本的开头可能有 BOM 字符。这些是空格,因此您可能在浏览器中看不到它们。请确保您的 PHP 文件在没有 BOM 的情况下进行编码

于 2019-10-03T19:10:25.437 回答