【问题标题】:Uncaught SyntaxError: Unexpected token D in JSON at position 0未捕获的 SyntaxError:位置 0 处 JSON 中的意外标记 D
【发布时间】:2017-05-28 12:06:51
【问题描述】:

此代码在 localhost 中运行良好,但不知何故,当我上传到 Linux 服务器时,当我单击 Division 下拉菜单中的空白区域时,它在控制台显示 数据错误(但没有提取任何值来自它应该显示的数据库):

未捕获的 SyntaxError:JSON 中位置 0 处的意外标记 D 在 JSON.parse() 在 XMLHttpRequest.stateck (index.php:xxx) stateck@index.php:xxx

第 xxx 行属于这段代码:var myarray = JSON.parse(httpxml.responseText);

<!DOCTYPE html>
<?php
include "../connect.php";// connection to database 
?>
<html lang="en">
<head>

  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>  

<script>
    function checkYearDistrict()
    {
         var year=document.getElementById( "year" ).value;
         var district=document.getElementById( "s2" ).value;

         if(year, district)
         {
              $.ajax({
              type: 'post',
              url: 'checkdata.php',
              data: {
                    yearID:year,
                    districtID:district,
                    },
              success: function (response) {
                    console.log(response );

                    if (response == 'false') {
                        $( '#year_status' ).html("Record Not Exist!");
                        $( '#district_status' ).html("<span>Record Not Exist!</span>");                     
                    } else {
                        json = JSON.parse(response);
                        $( '#year_status' ).html("OK");
                        $( '#district_status' ).html("<span style='color:red'>Record Already Exist.</span>");                       
                    }                     
              }
              });
         }
         else
         {

              $( '#district_status' ).html("");
              return false;
         }
    }



    function checkall()
    {        
         var yearhtml=document.getElementById("year_status").innerHTML;
         var districthtml=document.getElementById("district_status").innerHTML;

         if((yearhtml && districthtml)=="OK")
         {
            return true;
         }
         else
         {
            return false;
         }
    }

</script>

  </head>
<body>

<div class="container">

  <form name="testform" class="form-horizontal" method="POST" onsubmit="return checkall();>

    <div class="form-group">
    <div class="input-group">
    <span class="input-group-addon search_text_width">Year:</span>  
    <select id="year" name="year" class="form-control select2">
      <option value="">Select Year</option>
        <script>
            var myDate = new Date();
            var year = myDate.getFullYear();
            for(var i = 1999; i < year+1; i++){
                document.write('<option value="'+i+'">'+i+'</option>');
            }                   

        </script>

        <script type="text/javascript">
            function AjaxFunction()
            {
                var httpxml;
                try
                  {
                  // Firefox, Opera 8.0+, Safari
                  httpxml=new XMLHttpRequest();
                  }
                catch (e)
                {
                  // Internet Explorer
                    try
                    {
                         httpxml=new ActiveXObject("Msxml2.XMLHTTP");
                    }
                    catch (e)
                    {
                        try
                        {
                            httpxml=new ActiveXObject("Microsoft.XMLHTTP");
                        }
                        catch (e)
                        {
                            alert("Your browser does not support AJAX!");
                            return false;
                        }
                    }
                }

                function stateck() 
                {
                    if(httpxml.readyState==4)
                    {
                        //alert(httpxml.responseText);
                        var myarray = JSON.parse(httpxml.responseText);
                        // Remove the options from 2nd dropdown list 
                        for(j=document.testform.dist.options.length-1;j>=0;j--)
                        {
                            document.testform.dist.remove(j);
                        }


                        for (i=0;i<myarray.data.length;i++)
                        {
                            var optn = document.createElement("OPTION");
                            optn.text = myarray.data[i].dis_name;
                            optn.value = myarray.data[i].dis_id;  // You can change this to subcategory 
                            document.testform.dist.options.add(optn);

                        } 
                    }
                } // end of function stateck

                var url="dd.php";
                var div_code=document.getElementById('s1').value;
                url=url+"?div_code="+div_code;
                url=url+"&sid="+Math.random();
                httpxml.onreadystatechange=stateck;
                //alert(url);
                httpxml.open("GET",url,true);
                httpxml.send(null);
              }
        </script>  
    </select>   
    </div>  

    <br>
    <?php   require "config.php";   ?>
    <div class="input-group">
    <span class="input-group-addon search_text_width">Division</span>
        <select name="div" id="s1" class="demoInputBox form-control" onchange="AjaxFunction();">
            <option value="">Select Division</option>
            <?php
            $sql="select * from division ";  

            foreach ($dbo->query($sql) as $row) 
            {
                echo "<option value=$row[div_code]>$row[div_name]</option>";
            }
            ?>
        </select>
    </div>
    <br>
    <div class="input-group">
        <span class="input-group-addon search_text_width">District</span>
        <select name="dist" id="s2" class="demoInputBox form-control" onchange="checkYearDistrict();">
            <option value="">Select District</option>
        </select>       
    </div>
    <center><span id="district_status"></span></center>

    <br>
    <div class="input-group">
        <div class="col-sm-offset-3 col-sm-10">
            <input type="submit" class="btn" name="submit" value="Save Record">
        </div>
    </div>
  </form>
</div>
</body>
</html>

【问题讨论】:

  • 表示响应不是JSON,因此无法解析

标签: javascript php mysql json


【解决方案1】:

您可以请求JSON 数据,而不是text/ html 格式的响应

只需在您的 ajax 调用中再添加一个属性 DataType: JSON 并使用来自PHPjson_encode()JSON 格式发送响应

$.ajax({
  type:"POST",
  url:"test.php",
  data:{data:'data'},
  dataType: 'json',
  success: function(data){
    if(data['success']=='true'){
        alert('success');
    }else{
      if(data['success']=='false'){
        alert("not success");
      }
    }
  }
});

Test.php

   if($_POST['data']==1){
      $response['success'] = "true";
   } else {
      $response['success'] = "false";
   }

echo json_encode($response);

【讨论】:

  • 这是我对 checkdata.php 的编码方式,请评论如何编辑以解决问题。 &lt;?php if(isset($_POST['yearID']) &amp;&amp; isset($_POST['districtID'])) { $year=$_POST['yearID']; $district=$_POST['districtID']; $checkdata=" SELECT year, district FROM indicators WHERE year='$year' and district='$district' "; $query=$conn-&gt;query($checkdata); if($year=$query-&gt;fetch_assoc()) { echo json_encode($year); } else { echo 'false'; } exit(); } ?&gt;
  • if(isset($_POST['yearID']) && isset($_POST['districtID'])) { $response = array(); $year=$_POST['yearID']; $district=$_POST['districtID']; $checkdata=" SELECT year, district FROM 指标 WHERE year='$year' and district='$district' "; $query=$conn->query($checkdata); if($year=$query->fetch_assoc()) { $response['success'] = "true"; $response['year'] = $year; } else { $response['success'] = "false"; } 回声 json_encode($response);出口(); } ?>
  • 这里是dd.php代码&lt;?Php @$div_code=$_GET['div_code']; if(!is_numeric($div_code)){ echo "Data Error"; exit; } $sql="select dis_name, dis_id from t_hdms_code_district where dis_div_id='$div_code'"; $row=$dbo-&gt;prepare($sql); $row-&gt;execute(); $result=$row-&gt;fetchAll(PDO::FETCH_ASSOC); $main = array('data'=&gt;$result); echo json_encode($main); ?&gt;
  • 数据错误似乎来自控制台跟踪的dd.php。
【解决方案2】:

由于函数返回“return VoucherNo;”,我得到了同样的错误。在我更改为“return new JavaScriptSerializer().Serialize(VoucherNo);”之后它不会显示错误。

            public string SaveDetails(string Mode)
        {
            int res = 0;
            int res1 = 0;
            string VoucherNo = "";
            try
            {

            }
            catch (Exception ex)
            { }

            //return VoucherNo;
            return new JavaScriptSerializer().Serialize(VoucherNo);
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-18
    • 2021-12-06
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 2020-07-02
    • 2021-05-06
    • 1970-01-01
    相关资源
    最近更新 更多