Php 用JSON编码数据

Php 用JSON编码数据,php,jquery,ajax,database,forms,Php,Jquery,Ajax,Database,Forms,我的新代码和更新的更改。插入数字后单击按钮对表单没有影响 前端 $(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);

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

前端

 $(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 = $_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); 

如果没有如Anower中正确说明的
obj.length
obj.length
将是
未定义的
,并且您正在调用响应对象
obj
而不是
数据
。您将从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指出的,您应该检查
$\u GET['num']
,而不是
$\u GET['id']

您还应该对SQL注入攻击提供更多保护。请至少使用以下内容转义您的输入:

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

{num:id}
替换为
{id: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" />

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

您好,我希望代码获取在所选记录中找到的数据,并使用它填充表单中的元素,即名为“fname”/“sname”/“age”的元素。当前,在浏览器开发工具中输入id时没有响应,也没有任何原因。@Matt该id的输出是我在后端php文件-->{“FirstName”:1,“姓氏”:2,“Age”:3}@Matt:It's find.php中指定的数组,与html文件位于同一目录中。开发人员工具在首页或php主页上都没有给我任何信息。我尝试了您的警报,并收到以下消息->未捕获类型错误:对象函数(a,b){返回新的e.fn.init(a,b,h)}没有方法“警报”。也许我用错了?我不熟悉“警惕”。有什么想法吗?@Kamal:这是我的一个表单字段->名字:
@Matt:当我通过浏览器运行find.php时,(即不带num=whates),我得到一个未定义的索引错误->注意:未定义的索引:num in*:*********************************\website\find.php在第10行{“FirstName”:1,“姓氏”:2,“年龄”:3}还包括提醒供您参考。我将用新的代码编辑我的问题,不幸的是仍然无法工作
$query = "SELECT * FROM Customers WHERE ID = '" . mysql_real_escape_string($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" />
$result = array('FirstName' => 1, 'Surname' => 2, 'Age' => 3);

echo json_encode($result);