JSON.parse:意外的角色 - 我错过了什么角色?

时间:2013-09-27 14:42:20

标签: php jquery ajax json

环境:PHP 5.3.5 MySQL Server 5.5.8,jquery版本1.6

使用Ajax自动填充国家/地区的下拉列表。

我一直收到这个错误,我尝试了很多东西。例如在编码之前使用“'$ results'”包围$结果。错误仍然存​​在。

以下是输出示例:

array(1) {
  [0]=>
  array(4) {
    ["id"]=>
    string(2) "45"
    [0]=>
    string(2) "45"
    ["nicename"]=>
    string(16) "Christmas Island"
    [1]=>
    string(16) "Christmas Island"
  }
}

这是ajax(我甚至试图改变成功完成 - 如果我这样做,错误代码就会重复。

$.ajax({
    type: "POST",
    url: "models/ajaxHandler.php",
    data: {handler:"getCountries", nli:"-1"}, 
    dataType: "json",
    success: function(results){
        //results = $.parseJSON(results);
        var resultStr = "";

        for(var x in results)
            resultStr = resultStr + results[x]; 
        alert("RESULT" + resultStr);


        //populateDropDown(results);
    },
    error: function(xhr, status, error){
        alert(xhr+ "| ajax failure: could not populate list of countires | " + status + " | error:" + error);
        var xhrStr = "";
        for(var x in xhr)
            xhrStr = xhrStr + xhr[x];
        alert(xhrStr);
    }
});

在我对php中的json字符串进行编码之后,我正在逃避特殊字符,如下所示:

if (!empty($results)){
        $json = json_encode($results);
        //$json = form_safe_json($json);
        echo $json;
}

function form_safe_json($json) {
            $json = empty($json) ? '[]' : $json ;
            $search = array('\\',"\n","\r","\f","\t","\b","'") ;
            $replace = array('\\\\',"\\n", "\\r","\\f","\\t","\\b", "\'");
            $json = str_replace($search,$replace,$json);
            return $json;
}

3 个答案:

答案 0 :(得分:3)

  

我在php中对json字符串进行编码后,我正在逃避特殊字符

你不需要这样做 - json_encode()为你做了所有必要的逃避,事实上这样做可能会破坏json_encode()为你生成的有效JSON。

[编辑]

要明确:PHP的json_encode()函数从任何输入生成有效的JSON。 (如果它失败了,你唯一需要测试的是false,但如果你回应它,即使是在jQuery中也能正确解析,因为空字符串是有效的JSON)。

如果您的程序回显json_encode()的输出,那么您的程序将提供有效的JSON,并且不会在JS代码中获得JSON解析错误。

如果您的程序回显其他内容,或者在发送之前修改了JSON字符串,则很可能会出错。

需要注意的事项:

  • 不要尝试使用多个json_encode()调用一个接一个地发送多个JSON字符串。这将是无效的JSON。只需拨打json_encode()

  • ,即可对要发送的所有内容进行编码
  • 谨防PHP发送不需要的字符(特别是空格和UTF-8 BOM字符),这些字符可能会在许多情况下导致错误。

  • 如果错误仍然存​​在,请直接将JSON URL加载到浏览器中并查看源代码。您可能会立即看到错误。如果没有,请将JSON字符串复制并粘贴到one of the JSON test sites on the web并查看其报告的内容。这可能有助于解释问题。

  • 如果您使用的是PHP 5.4,则可以使用PRETTY_PRINT中的json_encode()选项。这可以帮助您进行调试。

答案 1 :(得分:2)

也许json_encode()可能有用吗? http://php.net/manual/en/function.json-encode.php

答案 2 :(得分:2)

我不确定您尝试使用form_safe_json命令实现了什么。

从:

返回的文本字符串
$json = json_encode($result);

将包含正确格式化的json,如果您希望Javascript正确解析它,则不应进一步转义。由form_safe_json进行的转义会破坏json。