使用 Jquery、AJAX 和 PHP 从 MySQL 数据库中检索数据

Posted

技术标签:

【中文标题】使用 Jquery、AJAX 和 PHP 从 MySQL 数据库中检索数据【英文标题】:Retrieving Data with Jquery, AJAX, and PHP from a MySQL Database 【发布时间】:2012-02-21 15:44:18 【问题描述】:

我试图弄清楚如何使用对 php 页面的 AJAX 调用从 mysql 数据库中检索数据。我一直在关注这个教程

http://www.ryancoughlin.com/2008/11/04/use-jquery-to-submit-form/

但我不知道如何让它发回 json 数据以便我可以读取它。

现在我有这样的东西:

$('h1').click(function() 
            $.ajax(
                type:"POST",
                url: "ajax.php",
                data: "code="+ code,
                datatype: "xml",
                success: function() 

                $(xml).find('site').each(function()
                    //do something
                );
            );


        );

我猜我的 PHP 会是这样的

    <?php

    include ("../../inc/config.inc.php");

    // CLIENT INFORMATION

    $code        = htmlspecialchars(trim($_POST['lname']));

    $addClient  = "select * from news where code=$code";
    mysql_query($addClient) or die(mysql_error());

?>

本教程仅展示如何将数据插入表中,但我需要读取数据。谁能指点我一个好的方向?

谢谢,

克雷格

【问题讨论】:

刚刚更新了答案。应该给你一个更好的画面。 【参考方案1】:

首先,我强烈建议在 ajax 请求中使用 JS 对象作为数据变量。当您拥有大量数据时,这将使您的生活变得更加简单。例如:

$('h1').click(function() 
            $.ajax(
                type:"POST",
                url: "ajax.php",
                data:  "code": code ,
                datatype: "xml",
                success: function() 
                $(xml).find('site').each(function()
                    //do something
                );
            );
        );

至于从服务器获取信息,首先您必须编写一个 PHP 脚本来从数据库中提取数据。如果您想从服务器获取大量信息,那么您可能还想以 XML 或 JSON 格式序列化您的数据(我会推荐 JSON)。

在您的示例中,我假设您的数据库表非常小且简单。可用的列是 id、code 和 description。如果您想提取特定代码的所有新闻描述,您的 PHP 可能看起来像这样。 (我有一段时间没有做任何 PHP 了,所以语法可能是错误的)

// create data-structure to handle the db info
// this will also make your code more maintainable
// since OOP is, well just a good practice
class NewsDB 
    private $id = null;
    var $code = null;
    var $description = null;

    function setID($id) 
        $this->id = $id;
    
    function setCode($code) 
        $this->code = $code;
    
    function setDescription($desc) 
        $this->description = $desc;
    


// now you want to get all the info from the db
$data_array = array(); // will store the array of the results
$data = null; // temporary var to store info to

// make sure to make this line MUCH more secure since this can allow SQL attacks
$code = htmlspecialchars(trim($_POST['lname']));

// query
$sql = "select * from news where code=$code";
$query = mysql_query(mysql_real_escape_string($sql)) or reportSQLerror($sql);

// get the data
while ($result = mysql_fetch_assoc($query)) 
    $data = new NewsDB();
    $data.setID($result['id']);
    $data.setCode($result['code']);
    $data.setDescription($result['description']);
    // append data to the array
    array_push($data_array, $data);


// at this point you got all the data into an array
// so you can return this to the client (in ajax request)
header('Content-type: application/json');
echo json_encode($data_array);

样本输出:

[
   "code": 5, "description": "desc of 5" ,
   "code": 6, "description": "desc of 6" ,
  ...
]

所以在这个阶段,您将拥有一个以 JSON 格式返回数据的 PHP 脚本。还假设这个 PHP 脚本的 url 是foo.php

然后您可以简单地通过以下方式从服务器获取响应:

$('h1').click(function() 
            $.ajax(
                type:"POST",
                url: "foo.php",
                datatype: "json",
                success: function(data, textStatus, xhr) 
                   data = JSON.parse(xhr.responseText);
                   // do something with data
                   for (var i = 0, len = data.length; i < len; i++) 
                       var code = data[i].code;
                       var desc = data[i].description;
                       // do something
                   
            );
         );

就是这样。

【讨论】:

如何从 php 获取实时输出?事实上,我的 php 脚本运行了 10 分钟,它每隔 2 分钟左右就会回显一些内容。我想捕获这些输出并使其在 html 中可用,而不是等待 php 脚本的完整执行。关于这个@miki725 的任何线索? 多么好的答案。谢谢你张贴这个!尽管其中有一些 Java 风格,但它并不是主要的。现在一切正常。你的男人! @miki725 Hiii 那里,你能帮我解决我的问题吗?***.com/questions/36774508/… 我迷失了 ajax【参考方案2】:

没有什么不同。只需像往常一样在 ajax.php 中获取数据即可。并在页面上的容器中发送响应。

就像这里解释的:

http://openenergymonitor.org/emon/node/107

http://www.electrictoolbox.com/json-data-jquery-php-mysql/

【讨论】:

嘿openenergymonitor.org/emon/node/107 教程似乎是我想要的,但它只输出第一行数据。知道如何让其他人打印吗? 检查 var id = data[0]; var vname = 数据[1];在 client.php 中。可能在文章示例中返回单行。在这里做点什么来得到所有 执行类似 while($row = mysql_fetch_row($result)) $table_data[]= array("id=>"$row['id'],name=>$row['姓名']); 回声 json_encode($table_data);在 api.php 中

以上是关于使用 Jquery、AJAX 和 PHP 从 MySQL 数据库中检索数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 ajax、jquery 和 PHP 从数据库更新图像不起作用

从 PHP (jQuery/AJAX) 插入 MySQL

如何使用ajax和jquery从php Web服务返回简单文本[重复]

使用 php 和 jquery ajax 从 mysql 数据库中获取数据

仅使用 jQuery (Ajax) 和 PHP 从 MySQL 获取最新消息? (在线聊天APP)

使用jQuery Ajax和PHP从URL上传图像