使用Ajax获取数据

时间:2016-07-08 09:53:55

标签: javascript php jquery json ajax

我有一个php文件,从下拉列表中选择一个项目代码,可以获取项目的最后价格和描述。

问题:

当请求在前端发出时,请求被发送到处理页面,处理页面返回JSON数据。

它在我的本地Windows Server上运行良好。迁移到Live Windows Server后,它会抛出如下错误:

SyntaxError: JSON.parse: unexpected character at line 1 column 9 of the JSON data var data4=JSON.parse(data4);

当我在Firefox浏览器上使用firebug检查元素时,我发现处理脚本显示200K OK 581ms,表明处理脚本没问题。但是下面是这个错误:

SyntaxError: JSON.parse: unexpected character at line 1 column 9 of the JSON data var data4=JSON.parse(data4);

当我进一步检查时,处理脚本没有问题,在响应和HTML TAB上,显示预期结果,该结果应该在请求时显示(前端)页面。

我需要帮助弄清楚为什么会这样。请找到以下页面。

前端页面脚本:

<script type="text/javascript" src="includes/scripts/newJquery.js"></script>
<script type="text/javascript">
$(document).ready(function() {
    $("select.partno").change(function(){
       var selectedCustomer = $(".partno option:selected").val();
       $.ajax({type: "POST",url:"process-grpid.php",data:{custid:selectedCustomer}}).done(function(data4){
            var data4=JSON.parse(data4);
           //using php-mysql before
           if(data4.sta == 0){
           $("#desc").html(data4.ref);
           $("#purch").html(data4.lprice);
           }else{
            $("#desc").html(data4.ref);
           $("#purch").html(data4.lprice);   

           }
       });
    });
    });
    </script>

Process-grpid.php脚本:

<?php
       if(isset($_POST["custid"])){

                include 'includes/session.php';
                include 'includes/db_connection.php';
                include 'includes/functions.php';
                 $partid = $_POST["custid"];
                 if($partid !== 'Select PartNo'){ 
             $gets = "SELECT * FROM tab_stock WHERE itemName='".$partid."'";
             $get = mysqli_query($connection,$gets);

          $row = mysqli_fetch_array($get);


          $desc = $row['description'];
          $lprice = $row['Rate'];
          if($partid=='N/A'){
              $res["sta"]=0;
              $res["ref"]="<input type='text'   class='desc' name='descr'  size='50' required='required'/>";
              $res["lprice"]="<input type='text' id='puch' name='lastpur'   required='required'/>";
          }else{
              $res["sta"]=1;
              $res["ref"]="<input type='text'  value='$desc' class='desc' name='descr'  size='50' readonly='readonly' required='required'/>";
              $res["lprice"]="<input type='text' id='puch' name='lastpur' value='$lprice'  readonly='readonly' required='required'/>";  

          }
          echo json_encode($res);
          }

         }

enter image description here

2 个答案:

答案 0 :(得分:0)

控制台返回200OK的一个原因是因为请求的服务器在那里,但它期望的响应(JSON)无效。

您也没有在ajax请求中指定dataType:'json',它告诉您期望json数据而不仅仅是纯文本。

答案 1 :(得分:0)

您似乎在两次声明data4,一次在函数def function(data4)中,然后再在var data4=...。如果您使用单独的变量名称,它应该工作。避免在同一个函数中在两个不同的上下文中重用变量名是个好主意。

$.ajax({type: "POST",
    url:"process-grpid.php",
    data:
    {
        custid:selectedCustomer
    }
}).done(function(response){

       var data4 = JSON.parse(response);

       if(data4.sta == 0){
           $("#desc").html(data4.ref);
           $("#purch").html(data4.lprice);
       }else{
           $("#desc").html(data4.ref);
           $("#purch").html(data4.lprice);   

       }
});

要考虑的一件事是JS本身就能理解JSON。意思是,您不需要使用JSON.parse。你只需告诉它期待JSON dataType: 'json',。我会使用success:代替done()done()可能无法正常工作,因为它并不关心成功。我也会使用truthy if语句。你的if和else语句也做同样的事情。其中一个似乎是不必要的。最后,添加一个错误回调。

$.ajax({
    type: "POST",
    url: "process-grpid.php",

    dataType: 'json', // expected dataType of the response

    data: {
        custid: selectedCustomer
    },
    success: function(response) {

        var data4 = response;

        if (data4.someValueThatShouldBePresent) {
            $("#desc").html(data4.ref);
            $("#purch").html(data4.lprice);
        } else {
            $("#desc").html(data4.ref);
            $("#purch").html(data4.lprice);

        }
    },
    error: function(request, error) {
            // This callback will trigger on an unsuccessful request
            alert('Unable to connect, try again. ');
        }
});