【问题标题】:set ajax response to a variable to make it an object将 ajax 响应设置为变量以使其成为对象
【发布时间】:2017-10-09 02:33:30
【问题描述】:

这是返回的数据

name: "Doe, John ", salary: "1000"

这里是代码

$.ajax({
   url: 'ajax.php',
   method: 'POST',
   data: {id: name.val()},
   success: function(data){
      var payObject = {data};
      alert(payObject["name"]);
   }
}};

它总是返回未定义,我该如何解决这个问题?

这是数据库中的员工表

name       salary
Doe, John  1000

这里是 ajax.php

<?php
    include 'db.php';
    $sql = $db->query("SELECT * FROM employee");
    $res = mysqli_fetch_assoc($sql);
    echo 'name:"'.$res['name'].'", salary: "'.$res['salary'].'"';
?>

【问题讨论】:

  • {data} 创建一个对象,该对象具有一个名为 data 的单个属性,其值为您的字符串的值,即 { data: 'name: "Doe, John ", salary: "1000"' }。你为什么不改变你的 PHP 来返回 JSON?

标签: javascript php ajax object


【解决方案1】:

您返回的只是一个字符串,JavaScript 本身不能将其用作对象。要解决此问题,您可以将数据库数据转换为 JSON 并简单地返回 JSON。在 JavaScript 中,您可以轻松地将 JSON 字符串转换为 JavaScript 对象,并像使用任何其他 JavaScript 对象一样使用它。

要将 PHP 数组转换为 JSON 字符串,请使用 PHP 函数 json_encode,这样您的 PHP 代码将如下所示

<?php
    include 'db.php';
    $sql = $db->query("SELECT * FROM employee");
    $res = mysqli_fetch_assoc($sql);
    echo json_encode($res); // convert PHP associative array to JSON string
?>

现在您只需使用 JSON.parse() 将 JSON 字符串转换为 JavaScript 对象或利用 jQuery 的 dataType:'json' 参数

$.ajax({
   url: 'ajax.php',
   method: 'POST',
   data: {id: name.val()},
   dataType: 'json', // convert JSON string to JavaScript object
   success: function(data){
      var payObject = data;
      alert(payObject["name"]);
   }
}};

【讨论】:

    【解决方案2】:

    您的代码有一些更正:

    首先,应该是 ajax 脚本块:

    $.ajax({ }); 
    

    而不是

    $.ajax({}};
    

    然后,您应该添加dataType:'json',以获取 json 对象作为服务器响应。

    我已经测试并成功从服务器获取json数据代码是这样的:

    $.ajax({
      url: 'data.php',
      method: 'POST',
      data: {
        id: $('#name').val()
      },
      dataType: 'json',
      success: function(data) {
        var payObject = data;
        alert(payObject.name);
      }
    });
    

    然后,您需要将数据包装到 Class 中,可能是这样的:

    <?php 
    class User { 
        public $name;
        public $salary;
    } 
    ?>
    
    <?php
        /**include 'db.php';
        $sql = $db->query("SELECT * FROM employee");
        $res = mysqli_fetch_assoc($sql);*/
        //fill your object 
        $user = new User();
        $user->name = "MTOha";
        $user->salary = 100000000;
        echo json_encode($user);
    ?>
    

    mysqli_fetch_assoc结果是数组,你也可以像YottoDead的答案一样使用。

    【讨论】:

      【解决方案3】:

      这一行:

      var payObject = {data};

      应该是:

      var payObject = JSON.parse(data);

      使用parse 函数会将您的 json 字符串值转换为实际的 JavaScript 对象。看看这个:https://www.w3schools.com/js/js_json_parse.asp

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-05-28
        • 1970-01-01
        • 1970-01-01
        • 2013-12-09
        • 2017-10-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多