【问题标题】:How to "refresh" a pages content using Ajax and PHP如何使用 Ajax 和 PHP “刷新”页面内容
【发布时间】:2015-09-23 20:46:16
【问题描述】:

我目前在一个项目中工作,我想我不太了解 ajax 的工作原理。

这就是我想要做的。

我有一个页面(list.php),默认情况下会呈现成员列表(带有图片等,因此 HTML 有点重)。

我还有一个过滤器,所以当我单击过滤器按钮时,我想在数据库查询中使用该过滤器更改内容。

我知道我可以使用 jQuery $.ajax 将过滤器值发送到 EXTERNAL (updatelist.php) 文件,运行查询并将内容返回为 json,然后使用 $.each呈现新的页面内容。

我的问题是:没有其他方法可以做到这一点吗?也许通过将文件(updatelist.php)包含到主页(list.php)中来在页面加载时运行php函数,然后当我单击过滤器按钮将ajax请求发送到同一个(list.php)时,只有php函数名?

我试过了,但是 php 代码根本没有运行,所以我想我对 php 的工作原理有一个模糊的了解。

我的猜测是加载到一个页面中的 php 仅在页面加载时执行,我无法再次运行它,所以我必须有一个呈现内容的外部文件。

有人能把这一切都清除吗?

你知道我确实搜索了一个答案,但所有人都说了同样的话,我需要 ajax 但没有人完全回答我的问题。

感谢您的宝贵时间。

代码:

$('.test').click(function() {
var data = [];
data.push({name: 'functionName', value: "functionName"});

$.ajax({ 
  type: 'POST', 
  url: '/list.php',
  data: data,
  dataType: 'text',
  success: function(html) { 

  }, error : function(e){
    alert("ajax error");
  }

}).done(function(done) {
});
});

HTML/PHP:

<a class="test">test</a>
<?php
   include ( $_SERVER['DOCUMENT_ROOT'] . "/updatelist.php");
?>

updatelist.php 内容

if ( isset($_POST["functionName"]) ) {
    functionName();
}

【问题讨论】:

  • 向我们展示你到目前为止所做的事情,代码方面
  • 我更新了我的问题。谢谢!

标签: javascript php jquery html ajax


【解决方案1】:

我的猜测是加载到一个页面中的 php 只在页面上执行 加载,我不能再次运行它,所以我必须有一个外部文件 呈现内容。

完全正确。 PHP 在服务器端 上运行。 例如:用户请求list.php

  • Webserver 收到来自客户端的请求
  • Webserver获取.php文件,解析&lt;?php ?&gt;之间的所有内容,并将输出写入文件中(当然不是原来的,这个例子只是为了让你基本了解它的工作原理)李>
  • 然后,网络服务器将解析后的文档发送给客户端,其中没有任何 PHP 代码,只有原始 HTML 和 JavaScript

您可能会问为什么 PHP 代码也没有被发送。对此有任何简单的解释:由于 PHP 执行服务器端的工作,它还执行连接到数据库等操作。现在想象一下,如果数据库连接也将发送到客户端。他只需要将文件保存到他的硬盘驱动器,用文本编辑器打开它,他就可以看到您的整个数据库连接详细信息,包括密码。

AJAX 现在所做的是将第二个请求发送到服务器,在那里它可以处理请求的信息(可能再次连接到数据库)并将其发送回客户端(以 JSON 格式)。 在客户端,JSON 数据再次被 JavaScript 解析并显示在页面上。

您不喜欢使用 AJAX 是否有特定的原因?它非常强大,您可以使用它创建一个高度动态的页面。 也许给我们更多你想要做的细节,我相信有一个解决方案,甚至可能使用 AJAX ;)

【讨论】:

  • 我喜欢使用 ajax 和 json 文件,它很简单,功能强大,但它是如此简单,以至于我猜想还有另一种方法可以做到这一点,而不必使用 .append in 渲染 1000 行 html jQuery。再次感谢您的回答。任何进一步的提示和技巧都非常感谢。
  • 您不必重新创建所有 HTML。只需给要更改特定 ID 的元素。 &lt;img id="img1" src="testimg.jpg" /&gt;。然后,您可以在解析 Ajax-Data 后使用 JavaScript 访问元素并更改它:$("#img1").attr("src", newSrcVar);
  • 好吧,我实际上想通过一个循环来获取我的 json,然后使用我的所有数据、img、名称等创建 al
      。这就是为什么我认为使用 php 创建 html 会是更快。
  • 您也不必重新创建 ul。只需给 ul 一个 id,然后您就可以遍历 li 元素。 $("#myUL li:nth-child("+loop_counter+")").text(ajaxData["ulData"][loop_counter]);如果你想了解更多关于 nth-child 的内容(对循环非常有用):api.jquery.com/nth-child-selector
  • 还有什么会更快,将查询结果循环到 php 中,然后将创建的所有 html 作为文本发送,然后用 jquery“粘贴”内容,或者只返回 json 中的值并创建 html 标签用 jquery?
【解决方案2】:

您可能会链接到同一个文件,但您为什么要这样做?将 json 放在不同的文件中不是更好吗?

这样做;你可以使用$_GET[] 变量,比如$_GET['json']。在 list.php 文件的顶部,添加:

if(isset($_GET['json'])){
  //show JSON results from 'updatelist.php'

  exit;
}

然后在您的 AJAX 调用链接中指向“list.php?json=true”,它应该可以工作。

【讨论】:

  • 我的问题是关于性能的,当我的 json 数据很大时(假设列表中有 50 多个用户),渲染页面需要一些时间。所以我认为只要直接在页面上调用 php 文件,内容就会更快地改变。
  • 恐怕这无助于更快地改变它。 PHP 在页面加载之前运行,只要 DOM 准备好,PHP 就已经完成。每次重新加载页面时,PHP 脚本都会从头开始,因此在性能方面不会有太大变化(也许缓存会有所帮助)。
  • 我喜欢使用 jquery ajax 和 json,因为它很容易理解。我猜想在 php 中使用 for/while 渲染它比在 jquery 中使用 append 来创建内容要快。似乎我已经在使用最好的方法来做到这一点。感谢你们。非常感谢任何其他建议。
【解决方案3】:

是的,还有另一种方法, 虽然我强烈建议解析 Json 并构建内容,但由于您将拥有更多控制权,您可以绑定事件等。 如果你想要更新一个 div,你可以只获取一个只有 div 的 php 文件并替换内容。

假设你有一个 div #myDiv 你可以使用 jquery 加载

$("#myDiv").load("/phpWithJustDivOnIt.php?someQueryParamIfYouneed");

这会将处理后的 php 文件的内容放入 div 中

【讨论】:

  • 所以最好和最快的方法仍然是拥有外部 php 文件,使用 ajax 调用它并使用 javascript/jquery 渲染元素,以免使用 .append 对吗?
  • 我不知道您真正想在该列表中引入什么,但假设结果来自数据库并且您遇到了性能问题,因为列表太大了。我的建议是在 sql 查询中使用 use limit 并在滚动时呈现更多项目,或者使用分页。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-27
  • 1970-01-01
  • 1970-01-01
  • 2016-04-14
相关资源
最近更新 更多