如何通过ajax将mysql结果作为json传递

Posted

技术标签:

【中文标题】如何通过ajax将mysql结果作为json传递【英文标题】:How to pass mysql result as jSON via ajax 【发布时间】:2015-07-16 08:34:17 【问题描述】:

我不确定如何通过 ajax JSON 将 mysql 查询的结果传递到 html 页面。 ajax2.php

$statement = $pdo - > prepare("SELECT * FROM posts WHERE subid IN (:key2) AND Poscode=:postcode2");
$statement - > execute(array(':key2' => $key2, ':postcode2' => $postcode));
// $row = $statement->fetchAll(PDO::FETCH_ASSOC);
while ($row = $statement - > fetch()) 
    echo $row['Name']; //How to show this in the html page?
    echo $row['PostUUID']; //How to show this in the html page?
    $row2[] = $row;

echo json_encode($row2);

如何将上面的查询结果通过下面的ajax传递到html页面中显示?

我的 ajax

$("form").on("submit", function () 
    var data = 
        "action": "test"
    ;

    data = $(this).serialize() + "&" + $.param(data);
    $.ajax(
        type: "POST",
        dataType: "json",
        url: "ajax2.php", //Relative or absolute path to response.php file
        data: data,
        success: function (data) 
            //how to retrieve the php mysql result here?
            console.log(data); // this shows nothing in console,I wonder why?
        
    );
    return false;

);

【问题讨论】:

检查控制台中的网络标签。 @sgtBOSE,相关文件的状态显示正常 回应是什么? 【参考方案1】:

我只想……

$rows = $statement->fetchAll(FETCH_ASSOC);
header("content-type: application/json");
echo json_encode($rows);

然后在javascript端:

xhr.addEventListener("readystatechange",function(ev)
//...
var data=JSON.parse(xhr.responseText);
var span=null;
var i=0;
for(;i<data.length;++i)span=document.createElement("span");span.textContent=data[i]["name"];div.appendChild(span);/*...*/

(不要依赖网络浏览器在 .response 中为您解析它,因为 application/json 标头,它在浏览器之间有所不同...使用 responseText 手动执行);

【讨论】:

【参考方案2】:

您可以将 json 编码的字符串保存到数组中,然后将其值传递给 javascript。

参考下面的代码。

<?php 
// your PHP code 
$jsonData = json_encode($row2); ?>

你的 JavaScript 代码

var data = '<?php echo $jsonData; ?>';

现在data 变量包含所有 JSON 数据,现在您可以继续编写代码,只需删除以下行

 data = $(this).serialize() + "&" + $.param(data);

不需要,因为data 变量是字符串。

在你的ajax2.php文件中你可以通过

json_decode($_REQUEST['data'])

【讨论】:

【参考方案3】:
header('Content-Type: application/json');
$row2 = array();
$result = array();
$statement = $pdo->prepare("SELECT * FROM posts WHERE subid IN (:key2) AND Poscode=:postcode2");
$statement->execute(array(':key2' => $key2,':postcode2'=>$postcode));
   // $row = $statement->fetchAll(PDO::FETCH_ASSOC);
     while( $row = $statement->fetch())
     
         echo $row['Name'];//How to show this in the html page?
          echo $row['PostUUID'];//How to show this in the html page?
          $row2[]=$row;
     
if(!empty($row2))
$result['type'] = "success";
$result['data'] = $row2;
else
$result['type'] = "error";
$result['data'] = "No result found";

echo json_encode($row2);

在你的脚本中:

$("form").on("submit",function() 

    var data = 
      "action": "test"
    ;
    data = $(this).serialize() + "&" + $.param(data);
    $.ajax(
      type: "POST",
      dataType: "json",
      url: "ajax2.php", //Relative or absolute path to response.php file
      data: data,
      success: function(data) 
        console.log(data);
         if(data.type == "success")
           for(var i=0;i<data.data.length;i++)
              //// and here you can get your values //
             var db_data = data.data[i];
              console.log("name -- >" +db_data.Name );
              console.log("name -- >" +db_data.PostUUID);
           
         
         if(data.type == "error")
            alert(data.data);
         
      
    );
    return false;

);

【讨论】:

我是不是要专门定位这行'header('Content-Type: application/json');'某处?因为很明显我的代码有问题,虽然你明确显示了代码,但它没有输出任何东西!!!! 它不是强制性的。只需将 data = JSON.parse(data) 放入 ajax 成功函数中。它会起作用的。【参考方案4】:

在 ajax 成功函数中可以使用 JSON.parse(data) 来显示 JSON 数据。

这是一个例子:

Parse JSON in JavaScript?

【讨论】:

【参考方案5】:

你的 json 编码应该是这样的:

 $json = array();
 while( $row = $statement->fetch()) 
     array_push($json, array($row['Name'], $row['PostUUID']));
 

    header('Content-Type: application/json');
    echo json_encode($json);

在您的 javascript 部分,您无需执行任何操作即可取回数据,它存储在成功函数的 data var 中。 您可以在网页上显示它并使用它做任何您想做的事情

【讨论】:

以上是关于如何通过ajax将mysql结果作为json传递的主要内容,如果未能解决你的问题,请参考以下文章

将 AJAX 结果作为道具传递给子组件

如何将 JSON 传递给 Django 中的 Ajax 请求?

如何在页面加载时在 HTML 选择选项中选择 JSON 结果

如何通过 ajax php 调用返回包含 json 对象的数组/json 对象?

使用 jQuery 的 $.ajax() 将多个 Json 对象作为数据传递

ajax调用时如何将外键传递给json数据?