Firefox错误'找不到元素'

Ian*_*ott 21 javascript php xhtml firefox xmlhttprequest

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

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

但是在Firefox 3中,no element found每次发送XHR请求时,错误控制台都会抛出错误.此外,如果我使用退出程序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);    } }, }
Run Code Online (Sandbox Code Playgroud)

而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'); 
}
Run Code Online (Sandbox Code Playgroud)

我也知道我不应该使用innerHTML,但这是另一个故事


错误就是这个

Error: no element found
Source File: http://localhost/ajax.php?1244648094055 
Line: 1
Run Code Online (Sandbox Code Playgroud)

请注意,在我正在使用的php页面上,错误引用了一个永远不会被调用的查询字符串.

Nic*_*itz 25

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

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

header('Content-Type: text/plain');
Run Code Online (Sandbox Code Playgroud)

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