-1

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

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

我不断收到此错误,并且尝试了很多方法。例如在编码之前用“'$results'”包围$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;
}
4

3 回答 3

3

在我对 php 中的 json 字符串进行编码后,我正在转义特殊字符

您不需要这样做 -json_encode()为您完成所有必要的转义,实际上这样做可能会破坏json_encode()为您生成的有效 JSON。

[编辑]

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

如果您的程序只回显 的输出json_encode(),而没有其他内容,那么您的程序将提供有效的 JSON,并且不会在您的 JS 代码中出现 JSON 解析错误。

如果您的程序回显任何其他内容,或者您​​在发送 JSON 字符串之前对其进行了修改,那么您很可能会遇到错误。

需要注意的事项:

  • 不要尝试使用多次调用来一个接一个地发送多个 JSON 字符串json_encode()。这将是无效的 JSON。使用一次调用对您想要发送的所有内容进行编码json_encode()

  • 当心 PHP 发送不需要的字符(特别是空格和 UTF-8 BOM 字符),这可能会在许多情况下导致错误。

  • 如果错误仍然存​​在,请将您的 JSON URL 直接加载到浏览器中并查看源代码。您可能会立即看到错误。如果没有,请将 JSON 字符串复制并粘贴到Web 上的 JSON 测试站点之一,然后查看它报告的内容。这可能有助于解释问题。

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

于 2013-09-27T14:52:30.313 回答
2

也许json_encode()会有一些用处?http://php.net/manual/en/function.json-encode.php

于 2013-09-27T14:48:04.820 回答
2

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

从以下位置返回的文本字符串:

$json = json_encode($result);

将包含格式正确的 json 并且不应进一步转义以防您希望 Javascript 正确解析它。by 的转义form_safe_json会破坏 json。

于 2013-09-27T14:53:58.113 回答