Firefox错误'找不到元素'

时间:2009-06-10 14:26:52

标签: php javascript firefox xhtml xmlhttprequest

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

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

但是在Firefox 3中,每次发送XHR请求时,错误控制台都会抛出错误no element found。此外,如果我使用exit('Done')之类的退出,Firefox会抛出(完成)语法错误,就像将其插入可见DOM一样。这似乎不会发生在Opera中。

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


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

我想知道它为什么发送错误,因为它确实没有返回任何内容。

这是一个从对象发出ajax请求的javascript片段。 它创建一个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页面上,错误引用了一个永远不会被调用的查询字符串。

2 个答案:

答案 0 :(得分:25)

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

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

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

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

答案 1 :(得分:-2)

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

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