AJAX json_encode返回[object Object]

时间:2016-05-06 13:31:29

标签: php jquery json

好的,所以我对JSON有点新意。我正在尝试拼凑一个AJAX调用(PHP mssql查询),它通过JSON将值返回到原始表单。我得到[object Object]而不是变量的实际值。通过一些搜索,我认为问题与解析有关,但我认为json_encode处理了这个问题。或许它确实如此,我没有正确地构建它。

这是我想要完成的事情: html表单有3个字段:帐号,帐号和地址1。我希望用户能够输入帐号,然后使用mssql查询的结果填充模糊名称和地址字段。

这就是我所拥有的: HTML

<body>
<label>Account Number:</label><input type="text" id="acctnumber" />
<label>Account Name:</label><input type="text" id="acctname" />
<label>Address 1:</label><input type="text" id="address1" />
</body>

Jquery(我将acctnumber输入值仅用于测试)

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script> 
<script>
$(document).ready(function(){
      $("#acctnumber").blur(function(){ 
          $.ajax({
              url: "ajaxtestscript.php?acctnumber=hfi01",
              dataType: "json", //the return type data is jsonn
              success: function(data){ // <--- (data) is in json format
                $("#acctname").val(data.Name);
                $("#address1").val(data.Address);
                //parse the json data
              }   
        });
    });
});
</script>

PHP

    <?php

    header('Content-Type: application/json');

//mssql connection info//

    $acctnumber  = $_GET["acctnumber"]; // we received this from the json call

    //declare the SQL statement that will query the database
    $query = "select[description],[daddr1] from trCustomer where company = '$acctnumber' and archived = 0";

    //execute the SQL statement and return records
    $rs = $conn->execute($query);

    $test = array();
    $test['Name'] = $rs[description];
    $test['Address'] = $rs[daddr1];

    echo json_encode($test);


    //echo $name.$address; put this in to test the query was working, which it was

    //close the connection and recordset objects freeing up resources 
    $rs->Close();
    $conn->Close();


    $rs = null;
    $conn = null;


    ?>

当我在html表单上实际尝试此操作时,我输入帐号值(此时硬编码)并单击该元素以激活模糊,而在另外两个输入字段中我得到[object Object] 。虽然如果我只是echo我的查询,我可以看到这些值,所以我认为我做错了什么或者遗漏了我的json_encode。任何帮助都会非常赞赏。

2 个答案:

答案 0 :(得分:1)

执行查询后,首先需要使用DB Library应该执行的任何功能来获取结果行。你不应该先准备好你的查询吗?

否则,您尝试json_encode()的对象是资源对象。这就是你得到object Object的原因。我希望这样的代码

$conn = new PDO(...);
$stmt = $conn->prepare("SELECT ...");
$stmt->execute();

$test = array();
while ($row = $stmt->fetch()) {
    $test[] = array(
        'Name' => $row[description],
        'Address' => $row[daddr1]
    );
}
echo json_encode($test);

$stmt = NULL;
$conn = NULL;

答案 1 :(得分:0)

首先,你的问题不清楚,根据情况,我会调试和测试输出。

<强> 1。 PHP:查询结果:var_dump(json_encode($test)); exit(0);

这将帮助您了解正在发送的数据。警报或控制台在ajax中打印接收的数据以进行查看。

<强> 2。 Javascript: console.log(data);

这将帮助您了解正在接收的数据以及您需要写入哪些内容以填充必填字段。检入浏览器控制台。

  

感谢upvoting。干杯!