用JSON编码数据


Encoding Data in JSON

我的新代码和更新的更改。插入数字后点击按钮对表单没有影响。

前端

 $(document).ready(function(){
$("#go").click(function() {
    var id=$("#myid").val();
    $.getJSON('find.php',{num:id},function(obj){
       alert(obj.toSource());
       $("input.fname").val(obj.FirstName); 
       $("input.sname").val(obj.Surname); 
       $("input.age").val(obj.Age); 
     });
 });
});

表单

 ID: <input type="text" name="id" class="myid">
 <input type="button" value="Go" id="go" />
 First Name: <input type="text" name="FirstName" class="fname"><br>
 Surname: <input type="text" name="Surname" class="sname"><br>
 Age: <input type="text" name="Age" class="age"><br>

后端

 $id = $_GET['num'];
 $result = array('FirstName' => 1, 'Surname' => 2, 'Age' => 3);
 echo json_encode($result);

obj.length将是undefined,并且您正在调用响应对象obj而不是data。你将从PHP中得到的是:;

{
    "FirstName": 1,
    "Surname": 2,
    "Age": 3
}

为此,请将JS更新为:

// if (obj.length>0){   remove this
   jQuery("input.fname").val(obj.FirstName); 
   jQuery("input.sname").val(obj.Surname); 
   jQuery("input.age").val(obj.Age); 
// }  and this...

请注意JavaScript的大小写敏感性。

此外,正如Nicola Peluchetti所指出的,您应该检查$_GET['num']而不是$_GET['id']

您还应该对SQL注入攻击提供更多保护。至少使用mysql_real_escape_string逃离输入:

$query = "SELECT * FROM Customers WHERE ID = '" . mysql_real_escape_string($id) . '"';

我想它在这里

$id = $_GET['num'];

而不是

$id = $_GET['id']; 

因为您的查询字符串应该类似

find.php?num=3

结束,然后更好地查看您的代码,错误应该是

   jQuery("input.fname").val(obj.FirstName); 
   jQuery("input.sname").val(obj.Surname); 
   jQuery("input.age").val(obj.Age); 

没有obj.length,如在另一个Transwer 中正确说明的

{id:id} 替换{num:id}

用您的代码签出下面的代码。

<script type="text/javascript">
$(document).ready(function(){
    $("#go").click(function() {
        var id=$("#myid").val();
        $.getJSON('http://localhost/test/test/json_action.php',{num:id},function(obj){
            //alert(obj.toSource());
           $("input.fname").val(obj.FirstName); 
           $("input.sname").val(obj.Surname); 
           $("input.age").val(obj.Age); 
         });
     });
});
</script>
<input type="hidden" name="myid" id="myid" value="2" />
<input type="button" value="Go" id="go" />
<input type="text" class="fname" />
<input type="text" class="sname" />
<input type="text" class="age" />

json_action.php

$result = array('FirstName' => 1, 'Surname' => 2, 'Age' => 3);
echo json_encode($result);

上面的代码和您的代码几乎相同,我可以通过点击go按钮来填充值。您在第10行收到了此错误"一个未定义的索引错误->注意::*******.''website''find.php中的未定义索引:num",因为您没有在查询中传递id。顺便说一句,我看不到查询的任何用途,所以我在json_action.php文件中删除了它。希望这对你有帮助。