火狐错误“未找到元素”

2022-08-30 20:04:41

首先,这并不是设置页面的理想方式,但是需要将脚本作为1个文件分发。

我在带有javascript的xhtml文档的顶部有一个php脚本,在某些情况下使用XHR将查询字符串发送到页面本身。然后,顶部的 php 激活,并将传递的内容存储为会话,然后杀死自身(exit())。XHR 是异步的,从不检查它是否返回内容。

然而,在 Firefox 3 中,每次发送 XHR 请求时,错误控制台都会引发一个错误。另外,如果我使用诸如 ,Firefox 会抛出 (Done) 的语法错误,就好像它将其插入到可见的 DOM 中一样。这在Opera中似乎没有发生。no element foundexit('Done')

有没有更好的方法来存储来自已经生成的xhtml页面的会话?显然,我可以XHR到另一个页面,但我宁愿将它们全部保留在一个脚本上。Firefox 是否将 XHR 对自身的请求视为 DOM 的更新?我不知道为什么它会发送此错误。


更新正如我所说,firefox只在发出XHR请求时才显示错误。该页面是有效的 XHTML,并且工作完美,没有错误,除非对页面本身发出 XHR 请求。

我想知道为什么它发送错误,因为它真的没有返回任何东西。

这是一个 javascript 代码段,它从对象发出 ajax 请求。它创建一个 XHR 对象,没有回调函数,并发布信息。当不引用同一页面时,它可以正常工作。

 var saveState = { saveContent: function(updateActiveMenu) {
    var sendState = new ajaxObject(gV.url);
    if (!updateActiveMenu) {
        var storageContainer = document.getElementById("StorageContainer").innerHTML;
        var menu = document.getElementById("Nav").innerHTML;
        sendState.update("Containerstring="+urlencode(storageContainer)+"&Nav="+urlencode(menu)+"&Active="+gV.activeMenuItem, 'POST', true);    } }, }

而 php 就是这样做的

if (isset($_REQUEST['Containerstring']) && isset($_REQUEST['Nav']) && isset($_REQUEST['Active'])) {
  $_SESSION['Containerarray'] = (saveContainer(regulateEscapes(urldecode($_REQUEST['Containerstring']))));
  $_SESSION['Navarray'] = (saveNav(regulateEscapes(urldecode($_REQUEST['Nav']))));
  $_SESSION['Active'] = $_REQUEST['Active'];
  exit('Done'); 
}

我也知道我不应该使用innerHTML,但那是另一回事了。


错误是这个

Error: no element found
Source File: http://localhost/ajax.php?1244648094055 
Line: 1

请注意,在我使用的php页面上,该错误引用了从不调用的查询字符串。


答案 1

Firefox 期望得到一些可以解析为 XML 的东西,并在收到空响应时抛出 XML 解析错误。

在 PHP 调用 “exit()” 之前,请使用

header('Content-Type: text/plain');

Firefox不会尝试将响应解析为XML,并且应该没有错误。


答案 2

你应该让你的php返回一个有效的HTTP响应,因为Firefox会尝试读取它,即使你没有对它做任何事情。因此,请至少返回一个有效的标头

header("HTTP/1.0 200");
exit();