【问题标题】:Encoding Data in JSON用 JSON 编码数据
【发布时间】:2012-03-22 11:00:53
【问题描述】:

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

前端

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

【问题讨论】:

  • 嗨,我希望代码获取在所选记录中找到的数据并使用它来填充表单中的元素,即名为“fname”/“sname”/“age”的元素。目前在浏览器开发者工具中输入id无响应且无原因。
  • @Matt 的输出是我在后端 php 文件中指定的数组 --> {"FirstName":1,"Surname":2,"Age":3}
  • @Matt:它是 find.php,与 html 文件位于同一目录中。开发人员工具在首页或 php 后页都没有给我任何东西。我尝试了您的警报并收到此消息 -> Uncaught TypeError: Object function (a,b){return new e.fn.init(a,b,h)} has no method 'alert'。也许我用错了?我不熟悉“警报”。有什么想法吗?
  • @Kamal:这是我的一个表单字段的示例 -> 名字:
  • @Matt:当我只是通过浏览器运行 find.php 时,(即没有 num=whatever)我得到一个未定义的索引错误 -> 注意:未定义的索引:*:**** 中的 num ******************\website\find.php 第 10 行 {"FirstName":1,"Surname":2,"Age":3}

标签: php jquery ajax database forms


【解决方案1】:

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) . '"';

【讨论】:

    【解决方案2】:

    我想它在这里

    $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,正如另一个答案中正确说明的那样

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        以上与您的代码几乎相同,我可以通过单击“开始”按钮来填充值。你得到这个错误'一个未定义的索引错误->注意:未定义的索引:中的数字:***** ******\website\find.php on line 10 ' 导致您没有在查询中传递 id。顺便说一句,我看不到任何查询的使用,所以我已经在我的 json_action.php 文件中消除了。希望这会对你有所帮助。

        【讨论】:

        • 还包括警报供您参考。
        • 我将使用新代码编辑我的问题,不幸的是仍然无法正常工作
        猜你喜欢
        • 2012-12-18
        • 2013-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多