【问题标题】:Parsing JSON string which sent as AJAX response from PHP file解析从 PHP 文件作为 AJAX 响应发送的 JSON 字符串
【发布时间】:2017-08-21 13:08:59
【问题描述】:

我正在尝试使用 jQuery / JavaScript 解析作为 ajax 响应从 PHP 文件发送的 JSON 字符串。

Ajax 调用:

<script>

            $(document).ready(function(){

              var query = $("#editor").html().replace(/(<([^>]+)>)/ig,"");
                      $.ajax({
                           type: "POST",
                           url: "app/query_db.php",
                           data: "q="+query,
                           success: function(resp){    
                                if(resp)    {
                                    alert("Response : "+resp);
                                    $("#res_data").html(resp);

                                }
                                else{
                                    alert("Response: Failed")
                                }
                      });
                    return false;
                });

            });
        </script>

PHP 文件:

$db_conn = new db_connect();
    $conn = $db_conn->connectToDB($DBHost,$DBName,$DBUser,$DBPwd);

    $query_res = array();


    if (fill_numeric_array_with_query_assoc($query_res, $sql_query, $conn)) {   // Function to execute the query and fill the result
        //do nothing
    } else {
        echo("Error description: " . mysqli_error($conn));  // Error message to display if failed to fetch the data
        exit();
    }
$data = json_encode($query_res);
    echo $data;

Result: [{"uid":"admin","pwd":"xyz"},{"uid":"guest","pwd":"abc"}]

每当我尝试解析上述 JSON 字符串时,我都会以 0 和 1 作为键,而将其他内容作为值。奇怪的是,当我复制此结果并将其分配给 JavaScript 中的变量时,它会正确解析字符串。

在尝试将其解析为 AJAX 响应时不知道出了什么问题。

将 JSON 字符串解析为 AJAX 响应时的表格格式:

在 javascript 中分配给变量时的响应:

uid     pwd

admin   xyz

guest   abc

【问题讨论】:

  • "每当我尝试解析上面的 json 字符串时,我都会以 0 和 1 作为键,而将其他内容作为值。"是的,没错,因为它是一个包含两个对象的数组。第一个对象在数组中的索引 0 处,第二个对象在索引 1 处。你期待什么?
  • 你的 JSON 是一个数组,它有数字键,因此 01?
  • 你想用这个对象做什么?想要追加到表格中?
  • “你想用这个对象尝试什么?想在表格中追加?– Muhammad Akber Khan” - 是的。我正在尝试用它创建一个表
  • "每当我尝试解析上面的 json 字符串时,我都会以 0 和 1 作为键,而将其他内容作为值。"是的,没错,因为它是一个包含两个对象的数组。第一个对象在数组中的索引 0 处,第二个对象在索引 1 处。你期待什么? – ADyson" - 我正在尝试通过解析 json 字符串来创建一个表,并希望在将结果分配给 javascript 中的变量时类似于下面的响应:uid pwd admin xyz guest abc

标签: php jquery json ajax


【解决方案1】:

这将获取数据并将每个对象转换为表格中的一行。我将假设 #res_data 是一个空的 &lt;table&gt; 元素。

$.ajax({
  type: "POST",
  url: "app/query_db.php",
  data: "q=" + query,
  dataType: "json",
  success: function(resp) {
    if (resp) {
      alert("Response : " + resp);
      $("#res_data").empty();
      if (resp.length > 0) {
        var header = "<tr>";
        for (var key in resp[0]) { 
          "<th>" + key + "</th>"; 
        }
        header += "</tr>";
        $("#res_data").append(header);
        var rows = "";
        for (var i=0; i< resp.length;i++) {
          rows += "<tr><td>" + resp[i].uid + "</td><td>" + resp[i].pwd + "</td></tr>";
        }
        $("#res_data").append(rows);
      }
      else { alert("No data returned"); }
    } else {
      alert("Response: Failed")
    }
  }
});

注意额外的 ajax 选项:dataType: "json"。这个很重要。因为您的 PHP 没有发送任何标头来告诉客户端将响应解释为 JSON,所以它很可能将其解释为文本。所以你必须添加dataType:"json" 以便jQuery 知道该做什么,并将响应直接放入一个JS 对象中。那么你应该没有问题。如果您不这样做,那么它会将其视为一个字符串,然后一次循环一个字符,这将导致您在问题中显示的奇怪输出。

【讨论】:

  • 感谢您的回复。但是我希望通过从 json 字符串中提取键来动态创建表头。
  • 好吧,您可以遍历数组中的第一个对象并提取键。如果您不确定如何执行此操作,我也可以创建一个示例。你会使用 for...in 循环
  • 下面是用于创建表格的 javascript 代码:var col = []; for (var i = 0; i
  • // 使用上面提取的标题创建 HTML 表标题行。 var tr = table.insertRow(-1); // 表行。 for (var i = 0; i
  • 非常感谢 Adyson 在 ajax 调用中添加 dataType 就像一个魅力
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 2011-02-26
  • 2014-04-12
  • 1970-01-01
  • 2017-06-09
  • 1970-01-01
  • 2021-11-18
相关资源
最近更新 更多