从Ajax进程中检索结果

时间:2016-07-11 16:20:38

标签: javascript php jquery json ajax

我需要一种使用Ajax,PHP从处理脚本检索数据到Request页面的方法。下面的代码显示了此错误:

  

SyntaxError:JSON.parse:JSON数据的第1行第13列的意外字符
  var data4 = JSON.parse(data4);

请注意,我有搜索但无法获得解决方案。所以,我想也许有一种方法可以在不使用json_encode的情况下将结果传递给请求页面。

<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",
                dataType: "json",
                data: {
                    custid: selectedCustomer
                }
            }).done(function(data4) {
                var data4 = JSON.parse(data4); //Error Area
                //using php-mysql before
                $("#desc").html(data4.ref);
                $("#purch").html(data4.lprice);

            });
        });
    });
</script>
<form>
    <table>
        <tr>
            <th>Item Code/Part NO:</th>
            <?php 
           include("db_connection.php");
          $s = mysqli_query($connection,"SELECT * FROM tab_stock ORDER BY itemName ASC");?>
                <td>
                    <select name="partno" class="partno">
                        <option>Select PartNo</option>
                        <option value="N/A">N/A</option>
                        <?php while($rw = mysqli_fetch_array($s)){ ?>
                            <option value="<?php echo $rw['itemName'];?>">
                                <?php echo $rw['itemName'];?>
                            </option>
                            <?php };?>
                    </select>
                </td>
                <th>Description:</th>
                <td id="desc"></td>
        </tr>
        <tr>
            <th>Last Purchase Price:</th>
            <td id="purch"></td>
        </tr>
    </table>
</form>

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);
        }            
    }
?>

当我运行此应用程序时,它显示了一个错误的SyntaxError:JSON.parse:JSON数据的第1行第13列的意外字符 var data4 = JSON.parse(data4) 但是当使用Firebug进行检查时,在HTML和RESPONSE选项卡中,它会显示预期的结果。问题,从处理脚本到请求页面获取结果的另一种方法是,输出uisng json_encode和JSON.parse(响应)?

4 个答案:

答案 0 :(得分:0)

尝试删除

dataType: "json"

呼叫ajax

<强>更新: 如果配置是dataType:json,那么你将不再需要javascript对象JSON.parse

答案 1 :(得分:0)

我拿了你的代码并做了一些测试。下一个代码适合我:

<强>的test.html

<html>
  <head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script type = "text/javascript">
function myAjax () {
var selectedCustomer = 1;                               // DATA FOR PHP.
$.ajax( { type : "POST",
          url  : "test.php",
          data : { "custid" : selectedCustomer },       // DATA FOR PHP.
          success: function ( data4 ) {
            var data4 = JSON.parse( data4 );
            alert( data4.custid );
            alert( data4.sta );
            alert( data4.ref );
            alert( data4.lprice );
            $("#desc").html( data4.ref );              // <TD> IN <BODY>.
          },
          error: function ( xhr ) {
            alert( "error" );
          }
        });
}
    </script>
  </head>
  <body>
    <button onclick="myAjax()">echo hello</button>
    <table>
      <tr>
        <td id="desc"></td>
      </tr>
    </table>
  </body>
</html>

<强> test.php的

<?php
if ( isset( $_POST[ "custid" ] ) )
   { $res = array();
     $res["custid"] = $_POST[ "custid" ];
     $res["sta"]    = 2;
     $res["ref"]    = "<input type='text' class='desc' name='descr' size='50' required='required'/>";
     $res["lprice"] = "<input type='text' id='puch' name='lastpur' required='required'/>";
     echo json_encode( $res );
   }
?>

注意我删除了ajax行dataType : "json",,因为只要我包含它,这段代码就会抛出错误。将以前的代码复制粘贴到名为&#34; test.html&#34;的两个文件中。和&#34; text.php&#34;,他们工作正常。

答案 2 :(得分:0)

而不是

echo json_encode($res);

使用:

echo json_encode(array('res' => $res));

而不是:

var data4 = JSON.parse(data4);

使用:

var d = data4.res;

而不是像阵列一样使用“d”。这是我试图告诉你的JS代码:

$(document).ready(function() {
    $("select.partno").change(function() {
        var selectedCustomer = $(".partno option:selected").val();
        $.ajax({
            type: "POST",
            url: "process-grpid.php",
            dataType: "json",
            data: {custid: selectedCustomer}
        }).done(function(data4) {
            var d = data4.res;
            $("#desc").html(d['ref']);
            $("#purch").html(d['lprice']);

        });
    });
});

如果仍然存在错误,则可能使用“d”并且您可以将d ['ref']更改为d [1]并将d ['lprice']更改为d [2]。

我发现在尝试将$ desc和$ lprice连接到输入字符串时也存在错误。

$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'/>";

还有一个加号......如果只在$ partid!='N / A'时使用这些变量,为什么不将查询移到else语句中呢?这样做可以避免一直执行查询。

if ($partid !== 'Select PartNo') {

        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 {
            $gets = "SELECT * FROM tab_stock WHERE itemName='" . $partid . "'";
            $get  = mysqli_query($connection, $gets);
            $row    = mysqli_fetch_array($get);

            $res["sta"]    = 1;
            $res["ref"]    = "<input type='text'  value='" . $row['description'] . "' class='desc' name='descr'  size='50' readonly='readonly' required='required'/>";
            $res["lprice"] = "<input type='text' id='puch' name='lastpur' value='" . $row['Rate'] . "'  readonly='readonly' required='required'/>";

        }
        echo json_encode($res);
    } 

答案 3 :(得分:0)

尝试根本不使用JSON.parse ...当你获得本机JavaScript对象时,而不是JSON字符串......