我是一家软件公司的工程实习生,我目前的项目是创建一个使用AJAX和PHP从数据库中获取数据的HTML页面。我以前从未在此网站上发布过,我一直在寻找类似的帖子并使用我找到的信息。在过去的2个小时左右,我一直在寻找解决问题的方法。我的AJAX调用返回错误:“SyntaxError:JSON.parse:JSON数据第1行第1列的意外字符。”
我尝试了很多东西,即:
似乎问题在于我的页面从我的PHP脚本接收的数据的格式化,如下所示:
header('Content-type: application/json');
$testarray = array("Name" => 'America', "Code" => '12345');
echo json_encode($testarray);
在我的jquery段中,我想从我的PHP脚本(最终将使用MySQL DB)中检索JSON数据,并将数据作为元素添加到我的列表框CountriesList中。我的AJAX调用如下:
$.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。
我很茫然。任何帮助表示赞赏。
答案 0 :(得分:1)
我把这个作为答案。
正如我在评论中所说,数据变量已经是一个JSON对象。所以你应该能够像这样访问每个元素:
for(var i in data){
if(data.hasOwnProperty(i){
$('#CountriesList').append($("<option></option>").attr("value",data[i].Value).text(data[i].Name));
}
}
你的测试数组只是一个关联数组,而javascript期待一组关联数组。尝试
$testarray = array();
$testarray[] = array('Name'=>'America', 'Value'=>'12345');
$testarray[] = array('Name'=>'Europe', 'Value'=>'54321');
答案 1 :(得分:0)
变量数据是JSON格式,如果你添加dataType:json或php标题,jQuery会为你做。
所以你必须改变:
var jsonData = JSON.parse(data);
By:
var jsonData = data;
答案 2 :(得分:-1)
如果你需要POST,这应该可行(你不需要在json中解析PHP编码的数组):
$.post('results.php', // url
{argOne: "test", argTwo: "test"}, // post data
function(jsonResponse) { // callback
$(jsonResponse).each(function (i, element) {
// do your things
});
},'json');
如果你可以使用GET方法:
$.getJSON("results.php", function(jsonResponse) {
$(jsonResponse).each(function (i, element) {
// do your things
});
});