【问题标题】:Parse json_encode return in Jquery在 Jquery 中解析 json_encode 返回
【发布时间】:2014-02-26 06:10:59
【问题描述】:

我对 json 相当陌生,我很难弄清楚如何解析特定的 json 响应。我确实在这个主题中进行了很多搜索,但我没有找到任何适合或适用于我的情况的内容。所以请回答这个问题,因为我知道它看起来像重复。

让我先描述一下我的场景。

我有一个 Mysql 表

表结构

mysql> describe faculty;
+-----------------------+-------------+------+-----+---------+-------+
| Field                 | Type        | Null | Key | Default | Extra |
+-----------------------+-------------+------+-----+---------+-------+
| faculty_id            | varchar(8)  | NO   | PRI | NULL    |       |
| faculty_name          | text        | NO   |     | NULL    |       |
| department_id         | varchar(8)  | YES  | MUL | NULL    |       |
| department_name       | text        | NO   |     | NULL    |       |
| profile_pic           | text        | NO   |     | NULL    |       |
| designation           | text        | NO   |     | NULL    |       |
| doj                   | date        | NO   |     | NULL    |       |
| email                 | text        | NO   |     | NULL    |       |
| highest_qualification | varchar(10) | YES  |     | NULL    |       |
| industrial_exp_yr     | smallint(6) | YES  |     | NULL    |       |
| industrial_exp_month  | smallint(6) | YES  |     | NULL    |       |
| teaching_exp_yr       | smallint(6) | YES  |     | NULL    |       |
| teaching_exp_month    | smallint(6) | YES  |     | NULL    |       |
| area_of_interest      | text        | NO   |     | NULL    |       |
| national_pub          | smallint(6) | YES  |     | NULL    |       |
| international_pub     | smallint(6) | YES  |     | NULL    |       |
+-----------------------+-------------+------+-----+---------+-------+
16 rows in set (0.01 sec)

我的 JS:

 $("#up_dept").change(function() {
        var dept = $('#up_dept option:selected').text();
        $.ajax({
            url: "proc/get_flist.php",
            type: "POST",
            data: {
                dept: dept
            },
            dataType: "json",
            async: true,
            cache: false,
            success: function(response) {
                // Tried naive forloop 
                // JSON.Parse
               // Nothing worked so kept blank
            }
        });
    });

PHP

$fac = new Faculty();
$dept = trim($_POST["dept"]);
$facul_list = $fac->faculty_list($dept);
echo json_encode($facul_list);

faculty_list 函数

function faculty_list($dept_name) {
        try {
            $db = new PDO(DB_CONN, DB_USER, DB_PASS);
            $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
            $query = "select * from faculty where department_name ='" . $dept_name . "';";
            $stmt = $db->query($query);
            if ($stmt->rowCount() > 0) {
                $list = $stmt->fetchAll();
                $db = null;
                return $list;
            } else {
                return "NULL";
            }
        } catch (PDOException $ex) {
            echo $ex->getMessage();

            //utils::log_error($ex -> getMessage());
        }
    }

回应

[{"faculty_id":"fac_001","0":"fac_001","faculty_name":"Arnab Roy","1":"Arnab Roy","department_id":"dep_002","2":"dep_002","department_name":"Electrical Engineering","3":"Electrical Engineering","profile_pic":"card-arnab.png","4":"card-arnab.png","designation":"Asst. Prof","5":"Asst. Prof","doj":"2014-01-07","6":"2014-01-07","email":"arnab@gmail.com","7":"arnab@gmail.com","highest_qualification":"M.Tech","8":"M.Tech","industrial_exp_yr":0,"9":0,"industrial_exp_month":0,"10":0,"teaching_exp_yr":3,"11":3,"teaching_exp_month":0,"12":0,"area_of_interest":"CURCITS","13":"CURCITS","national_pub":0,"14":0,"international_pub":0,"15":0},{"faculty_id":"fac_002","0":"fac_002","faculty_name":"Utsav Banerjee","1":"Utsav Banerjee","department_id":"dep_002","2":"dep_002","department_name":"Electrical Engineering","3":"Electrical Engineering","profile_pic":"fac_002_ad-learning-centre.jpg","4":"fac_002_ad-learning-centre.jpg","designation":"Asst. Prof","5":"Asst. Prof","doj":"2014-02-09","6":"2014-02-09","email":"utsav@gmail.com","7":"utsav@gmail.com","highest_qualification":"M.Tech","8":"M.Tech","industrial_exp_yr":5,"9":5,"industrial_exp_month":0,"10":0,"teaching_exp_yr":0,"11":0,"teaching_exp_month":6,"12":6,"area_of_interest":"CIRCITS , BLOB ","13":"CIRCITS , BLOB ","national_pub":0,"14":0,"international_pub":3,"15":3}]

现在,我需要能够 console.log 响应的每个字段 说,

response.faculty_id[0];

请帮我解决这个问题。我不太确定响应是否是有效的 json。

【问题讨论】:

  • en.wikipedia.org/wiki/SQL_injection 使用准备好的查询,或者至少使用数据库特定的输入转义符。如果我指定 '; 会发生什么?删除表教师'作为我的部门名称?
  • 感谢我也为此使用了准备好的声明。我通常只将它用于插入和更新语句。

标签: php jquery mysql json


【解决方案1】:

response是一个数组,需要循环。

success: function(response) {
    $.each(response, function(index, data) {
      console.log(data.faculty_id);
    });
    // get the first one only
    console.log(response[0], response[0].faculty_id);
}

【讨论】:

    【解决方案2】:

    只需将此行替换为

    return $list;
    

    这个

    return json_encode($list);
    

    你的问题应该解决了!

    【讨论】:

      【解决方案3】:

      试试这个

      var json_resp = jQuery.parseJSON(response); console.log(json_resp[0].faculty_id)

      【讨论】:

      • 不相关。数据类型设置为 JSON 并且响应是有效的 JSON,因此 jQuery 已经将响应解析为 Javascript 对象。这会报错。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-26
      • 2010-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多