【问题标题】:Create custom XML which is then picked up via AJAX创建自定义 XML,然后通过 AJAX 获取
【发布时间】:2011-11-22 13:47:38
【问题描述】:

由于某种原因,我在 firebug 中不断收到 XMLDoc 为空。我认为我的程序可能没有解析我尝试生成的 XML(这意味着我可能没有正确执行它)。

注意:我不想在这里使用 JQUERY!

这是我应该生成 XML 代码的代码:

<?php
$con = mysql_connect("localhost", "root", "");
if (!$con)
{
    die('Could not connect: ' . mysql_error());
}
mysql_select_db("generic");
$rescult = mysql_query("SELECT * FROM culture order by cult_id");
if (!$rescult) {
    die('Invalid query: ' . mysql());
}
$row = mysql_fetch_row($rescult);
ECHO "<item>";
ECHO "<item1>" . $row[0] . "</item1>" . "<br />";
ECHO "<item2>" . $row[1] . "</item2>" . "<br />";
ECHO "</item>";
?>

这是我应该解析它的代码:

<html>
<header>
<script type="text/javascript">

if (window.XMLHttpRequest)
{   // Code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
}
else
{   
    // Code for IE6, IE5
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","testitout2.php",false);
xmlhttp.send();
xmlDoc = xmlhttp.responseXML;

document.getElementById("item1").value =
xmlDoc.getElementsByTagName("item1")[0].childNodes[0].nodeValue;

document.getElementById("item2").value =
xmlDoc.getElementsByTagName("item2")[0].childNodes[0].nodeValue;

</script>
</header>
    <body>
        <input type="text" id="item1">
        <input type="text" id="item2">
    </body>
</html>

【问题讨论】:

  • 对服务器的请求是异步的。正如您的代码所期望的那样,您不会立即得到响应。相反,您必须为请求的状态更改设置一个处理程序,并且当数据从服务器返回到客户端时,您将获得数据。
  • 在请求完成后在 Firebug 控制台中执行 xmlhtp.responseText 会得到什么?
  • @Pointy: 由于标志 async 在 OP 代码中显式设置为 false,因此请求同步的。
  • 哦,杜尔,你是对的,@Luc1245 - 无论如何,他不应该那样做 :-)
  • @Pointy 我完全同意... Ajax 是异步的,否则就不是 Ajax。

标签: php javascript html xml ajax


【解决方案1】:

编辑:我没有注意到 async 标志。猜猜我的答案是无关紧要的。

您正在尝试在 XML 加载之前访问它。 将属性onreadystatechange 设置为xmlhttp

 xmlhttp.onreadystatechange = onStateChange;

 function onStateChange() {
    if (xmlhttp.readyState != 4) return; //4 means doc is ready
    var xmlDoc = xmlhttp.responseXML;
 }

【讨论】:

    【解决方案2】:

    您使用了错误的 HTML 标记:&lt;header&gt;...&lt;/header&gt;

    尝试将其替换为&lt;head&gt;...&lt;/head&gt;,否则浏览器可能会跳过您的脚本。

    【讨论】:

      猜你喜欢
      • 2015-11-14
      • 1970-01-01
      • 2012-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-02
      相关资源
      最近更新 更多