【问题标题】:Using AJAX and PHP to write HTML使用 AJAX 和 PHP 编写 HTML
【发布时间】:2014-11-11 15:02:42
【问题描述】:

我有一个网页,它在计时器上使用下面的 Javascript 代码来执行 PHP 脚本。该 PHP 脚本解析一个 XML 文件并提取数据,通过“echo”返回该数据,它替换了 HTML 页面中的“替换”div。

这不起作用。如果我让 PHP 脚本只返回基本文本或一些简单的 HTML,那么一切正常。当我尝试让它发回 HTML 表格,甚至是要添加到网页表格中的行时,它根本不会出现,并且 div 没有替换文本。我需要从 PHP 脚本向表中添加 HTML 表或行。我该怎么做?

非常感谢您的帮助!

function completeTable() {

  if (window.XMLHttpRequest) {
    xmlhttp=new XMLHttpRequest();
  } else {
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
      document.getElementById("replacement").innerHTML=xmlhttp.responseText;
    }
  }
  xmlhttp.open("GET","php-parser.php",true);
  xmlhttp.send();
}

【问题讨论】:

  • 你不使用 jQuery 有什么原因吗?
  • 非常缺乏经验,不知道该怎么做。我写了很多 PHP,它可以与我正在使用的数据库一起使用。我愿意接受任何建议。当我从 PHP 脚本中检索数据时,我只是不想刷新整个页面。
  • 哈哈,但说真的,为什么 OP 不使用 jQuery?
  • 尝试使用浏览器网络检查器查看页面是否被请求以及它包含什么
  • @b_dubb 建议使用 jquery 的原因是因为你的代码是$('#replacement').load('php-parser.php')。而已。它并不像听起来那么可怕:)

标签: javascript php html ajax


【解决方案1】:

下面是一个示例,说明如何使用 jQuery 和 JSON 完成您正在尝试的事情。它将在前端渲染得更快。可能不得不玩这个。只需弄清楚如何将来自数据库的数据写入 JSON 结构,类似于我确定您正在创建的 xml,并将其设置在某种 cronJob 上以运行您的 PHP 收集。下面的代码应该正确构建表格。我是手工写的,所以你可能不得不玩一下,而且我不知道你想要引入的数据结构,所以我做了一些 bs json。

JS

    function gatherContent(){
        var data = $.ajax('content.json');
        data = data.users
        var elementBlock = document.createElement("table");
        for(x = 0;x < data.length; x++){
        elementBlock.appendChild('<tr><td>'+data(x).name+'</td><td>'+data(x).address+'</td></tr>');
        }
        $('#replacement').html(elementBlock);
}

内容.JSON

{
    "users": [
        {
            "name": "blah",
            "address": "more blah"
        },
        {
            "name": "blah",
            "address": "more blah"
        }
    ]
}

【讨论】:

    【解决方案2】:

    我希望您向我们展示的内容应该有效。它对简单的静态字符串按预期工作证实了这一点。因此,实际上只有两种可能性。要么是 javascript 出了问题,要么是 PHP 出了问题。

    我首先将浏览器指向 PHP 端点并检查它是否返回了您期望的内容。然后验证这是一个格式良好的片段。然后,如果没有明显错误,将其通过管道传输到文件中,并用文件内容替换脚本的输出(但不是脚本的任何其他部分)。

    顺便说一句,如果您将 responseText 发送到不希望呈现格式良好的 HTML 的内容(例如警报对话框或文本区域),您可能会更清楚地了解正在发生的事情。

    【讨论】:

    • 我从命令行运行了 PHP 脚本,输出很完美。我将输出放在一个文本文件中,并尝试以这种方式替换文本,但得到的结果与之前显示文本的结果相同,还有一些简单的 HTML,但没有任何格式。此外,文本显示在表格的标题中,而不是替换 div 的位置,即正文中的几行。
    • 上次你说“它只是根本没有出现”,现在你说它出现在错误的 lpace 中 - 这些是非常不同的结果。听起来您将 HTML 注入错误的位置。
    • 我很抱歉造成混乱。文本总是显示出来,需要一些 HTML 代码的图像也是如此。但是,表格行标签不存在,并且文本显示在表格的错误部分。也许我需要以某种方式明确定义表格行的位置?我想如果我将替换 div 放在我实际希望新代码去的地方,它就会简单地放在那里。不是这样吗?
    • 我不认为你可以在表中包含一个 DIV,除非它嵌套在 TD 或 TH 中 - 除非你要使用 CSS 表,否则你需要将 TR 元素附加到表而不是替换innerHTML。
    【解决方案3】:

    像这样在响应中添加html标签

    $response = '<table><tr><td>'.$value.'</td></tr></table>';
    

    【讨论】:

    • @andrew 我认为发布此内容的每个人都感到困惑。问了一个 javascript 而不是 PHP 的问题。 dubb 看到$又看到jquery 现在大家都懵了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2016-08-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2019-05-16
    • 1970-01-01
    相关资源
    最近更新 更多