环境: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;
}
答案 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。