Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript SyntaxError:JSON.parse:AJAX调用中出现意外字符错误_Javascript_Php_Jquery_Json_Ajax - Fatal编程技术网

Javascript SyntaxError:JSON.parse:AJAX调用中出现意外字符错误

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

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

我尝试了很多东西,即:

  • 向$.ajax中的选项添加数据类型:“json”
  • 添加标题(“内容类型:application/json”);到PHP代码
  • 在success函数中使用console.log($.parseJSON(data))
  • 在PHP中重新格式化代码,使其包含引号或不包含在数组中
  • 问题似乎在于页面从PHP脚本接收的数据的格式,如下所示:

    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格式。谢谢你的帮助。