Javascript SyntaxError:JSON.parse:AJAX调用中出现意外字符错误
我是一家软件公司的工程实习生,目前的项目是创建一个HTML页面,使用AJAX和PHP从数据库获取数据。我以前从未在这个网站上发布过,我一直在寻找类似的帖子,并使用我找到的信息。在过去的两个小时左右,我一直在寻找解决问题的方法。我的AJAX调用返回错误:“SyntaxError:JSON.parse:JSON数据第1行第1列的意外字符。” 我尝试了很多东西,即:Javascript SyntaxError:JSON.parse:AJAX调用中出现意外字符错误,javascript,php,jquery,json,ajax,Javascript,Php,Jquery,Json,Ajax,我是一家软件公司的工程实习生,目前的项目是创建一个HTML页面,使用AJAX和PHP从数据库获取数据。我以前从未在这个网站上发布过,我一直在寻找类似的帖子,并使用我找到的信息。在过去的两个小时左右,我一直在寻找解决问题的方法。我的AJAX调用返回错误:“SyntaxError:JSON.parse:JSON数据第1行第1列的意外字符。” 我尝试了很多东西,即: 向$.ajax中的选项添加数据类型:“json” 添加标题(“内容类型:application/json”);到PHP代码 在succe
header('Content-type: application/json');
$testarray = array("Name" => 'America', "Code" => '12345');
echo json_encode($testarray);
$.ajax({
cache: false,
url: 'results.php',
method: 'POST',
dataType: 'json',
data: "",
success: function (data, textStatus, jqXHR){
//I get an error with the following line
var jsonData = JSON.parse(data);
$(jsonData).each(function (i, element)
{
var htmlSelect = document.getElementById("CountriesList");
var opt = document.createElement("option");
opt.text = element.Name;
opt.value = element.Code;
htmlSelect.options.add(opt);
});
},
error: function(jsXHR, textStatus, errorThrown)
{
alert('Error: ' + errorThrown)
}
});
在jquery段中,我想从PHP脚本(最终将使用MySQL数据库)中检索JSON数据,并将数据作为元素添加到我的列表框CountriesList中。我的AJAX调用如下所示:
header('Content-type: application/json');
$testarray = array("Name" => 'America', "Code" => '12345');
echo json_encode($testarray);
$.ajax({
cache: false,
url: 'results.php',
method: 'POST',
dataType: 'json',
data: "",
success: function (data, textStatus, jqXHR){
//I get an error with the following line
var jsonData = JSON.parse(data);
$(jsonData).each(function (i, element)
{
var htmlSelect = document.getElementById("CountriesList");
var opt = document.createElement("option");
opt.text = element.Name;
opt.value = element.Code;
htmlSelect.options.add(opt);
});
},
error: function(jsXHR, textStatus, errorThrown)
{
alert('Error: ' + errorThrown)
}
});
这段代码中可能还有其他错误,因为我无法调试这个格式化问题。当我单独打开PHP脚本时,得到的响应是:{“Name”:“America”,“Code”:“12345”}。据我所知,它是格式正确的JSON
我不知所措。非常感谢您的帮助。如果您需要POST,这应该可以工作(您不需要解析PHP在json中编码的数组): 如果可以使用GET方法:
$.getJSON("results.php", function(jsonResponse) {
$(jsonResponse).each(function (i, element) {
// do your things
});
});
变量数据是JSON格式的,如果添加数据类型:JSON或php头,jQuery将为您执行此操作 所以你必须改变:
var jsonData = JSON.parse(data);
By:
var jsonData = data;
我把这当作一个答案 正如我在评论中所说,数据变量已经是一个JSON对象。因此,您应该能够像这样访问每个元素:
for(var i in data){
if(data.hasOwnProperty(i){
$('#CountriesList').append($("<option></option>").attr("value",data[i].Value).text(data[i].Name));
}
}
响应是否还没有json?我认为您不需要解析它。试试console.log(JSON.stringify(data));如果这输出了一个JSON字符串,那么JSONI已经尝试过这个选项,但是我无法在循环中访问它。我当前的循环允许我使用element.访问每个元素。当我只将变量设置为数据而不进行解析时,当我将变量分配给该元素.Name或element.Code时,什么也没有发生。是否有更好的方法访问我循环中的每个键/值对?感谢您的帮助!我试着把它放进去,我的新成功函数只包含了你的代码。但它仍然给了我完全相同的错误。我尝试注释掉数据类型:“json”,但它没有给我语法错误,但现在您的代码返回“undefined”。@ChristieFrieg这可能是因为您的测试数组实际上是一个关联数组,请尝试将php更改为$testarray=array(array(“Name”=>“America”,“code”=>“12345”);我让它弹出一个带有数据的警报,当我注释掉该数据类型时,它返回以下内容:“{”Name:“America”,“Code:“12345”}”,这不是json,尽管我在php中使用了json_encode。我只是越来越困惑。好吧,我解决了问题。我使用了项目合作伙伴发给我的一个PHP文件,该文件最初将数据发送到另一个页面。她在顶部和底部放了一个php标签。所以它返回的是PHP文件的内容,当然不是JSON格式。谢谢你的帮助。