SyntaxError:JSON.parse:AJAX调用中的意外字符错误

时间:2015-11-17 22:36:37

标签: javascript php jquery json ajax

我是一家软件公司的工程实习生,我目前的项目是创建一个使用AJAX和PHP从数据库中获取数据的HTML页面。我以前从未在此网站上发布过,我一直在寻找类似的帖子并使用我找到的信息。在过去的2个小时左右,我一直在寻找解决问题的方法。我的AJAX调用返回错误:“SyntaxError:JSON.parse:JSON数据第1行第1列的意外字符。”

我尝试了很多东西,即:

  1. 将dataType:'json'添加到$ .ajax中的选项。
  2. 添加标题(“Content-type:application / json”);到PHP代码。
  3. 在成功函数中使用console.log($。parseJSON(data))。
  4. 在PHP中重新格式化我的代码以包含引号或不将它们包含在数组中
  5. 似乎问题在于我的页面从我的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。

    我很茫然。任何帮助表示赞赏。

3 个答案:

答案 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
    });                           
});