我正在尝试使用JQuery将Web浏览器中的AJAX数据发送到Web服务器中的PHP脚本,然后从服务器获取响应。 PHP脚本正确地接收和处理请求,但是服务器的响应中似乎存在JQuery无法解析的内容。使用Firefox,我收到以下错误:
SyntaxError:JSON.parse:JSON数据第1行第1列的意外字符
使用Chromium我得到这样的东西:
SyntaxError:位于0的JSON中的意外标记
我不确定这是空格还是其他角色,因为Chromium不允许我复制提醒文字。
无论如何,这是驻留在服务器中的PHP脚本,处理AJAX请求并生成响应。我之前使用json_encode()来返回动态生成的数据,但是现在我正在使用静态字符串来尝试使其工作:
<?php
echo '[{"id":1,"label":"sinetiqueta","value":"nada","url":"nadicaDeUrl"}]';
?>
这是我的JQuery AJAX代码:
$.ajax({
url: 'www.siteurl.com/server_script.php',
method: 'GET',
cache: false,
contentType: "application/json; charset=utf-8",
data: request,
dataType: 'json',
dataFilter: function ( recieved_data, data_type ) {
//I added this function just to check the JSON data before it gets parsed by JQuery
alert('DATAFILTER --- recieved_data: ' + recieved_data + ' * data_type: ' + data_type);
var filtered_data = recieved_data;
return (filtered_data);
},
success: function (json) {
alert('SUCCESS --- json: ' + json);
response($.map(json, function () {
return json;
}));
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert('error - ' + textStatus + ': ' + errorThrown + ' * Server Response:_' + XMLHttpRequest.responseText + '_')
}
});
因此,PHP脚本可以毫无问题地获取JQuery的消息,返回一个静态字符串(据我所知)正确形成的JSON,它可以毫无问题地返回浏览器(dataFilter函数中的alert命令显示相同的内容) PHP发回的字符串)但JQuery无法解析它。
有趣的是:如果我将相同的静态字符串直接插入到dataFilter函数中而不是从PHP脚本中传递它,那么JQuery会正确地解析它,其他所有内容都可以顺利运行!
dataFilter: function ( recieved_data, data_type ) {
alert('DATAFILTER --- recieved_data: ' + recieved_data + ' * data_type: ' + data_type);
/*var filtered_data = recieved_data;*/
//instead of using the data I got from PHP, I use a string literal value
var filtered_data = '[{"id":1,"label":"sinetiqueta","value":"nada","url":"nadicaDeUrl"}]';
return (filtered_data);
},
这很有效,但它显然不符合我的需要,因为我需要使用从服务器发回的JSON数据。现在,我正在使用完全相同的JSON字符串,只有JQuery在从PHP获取它时才能解析,即使它似乎是完全接收它并且正确编码,据我所知。
我无法弄清楚我从PHP获得的数据可能发生了什么。当在dataFilter()函数中使用alert命令显示时,它看起来完全正常!我在这里错过了什么?任何帮助将不胜感激。提前谢谢!
答案 0 :(得分:1)
感谢用户JAAulde,我找到了问题的原因。服务器端PHP脚本返回格式正确的JSON数据,并在接收后使用浏览器的网络检查器和JQuery脚本进行检查,我看不到任何可能阻止解析器处理它的无关字符。
我的问题的原因是我在PHP脚本中包含的一个小配置文件,一些文本编辑器已经编写为带有BOM(byte order mark)的UTF8,仅仅包含其中,显然产生某种不可显示的输出被添加到数据的开头并在客户端脚本中混淆JSON解析。当你需要发送另一个脚本来处理孩子时,要小心你的UTF-8编码文件中的BOM!
非常感谢用户Nitin和charlietfl的有用和合理的答案!