Firefox 错误“未找到元素”

Posted

技术标签:

【中文标题】Firefox 错误“未找到元素”【英文标题】:Firefox error 'no element found' 【发布时间】:2010-11-01 20:00:46 【问题描述】:

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

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

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

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


更新 正如我所说,firefox 仅在发出 XHR 请求时才解决错误。该页面是有效的 XHTML 并且可以完美运行,除非对页面本身发出 XHR 请求,否则不会出错。

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

这是一个从对象发出 ajax 请求的 javascript sn-p。 它创建一个没有回调函数的 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 页面上,该错误引用了一个从未调用过的查询字符串。

【问题讨论】:

您所描述的内容有些不一致。如果 xhr 从不使用返回值(即“完成”),那么它不能将其插入 DOM,现在可以吗? 最好贴一些你的代码的小例子。 为什么不把页面源代码的相关部分放上去? 当响应正文为空时(如带有Content-Length: 0 的图像),显然 Firefox 会输出此消息 【参考方案1】:

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

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

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

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

【讨论】:

没关系,我使用了“HTTP/1.0 200”标头并假设这会做同样的事情,我肯定弄错了;)这很有效,非常感谢。 在我的情况下,我从服务器发送了一个空响应,jQuery 猜测期望 xml 并尝试解析它。我只是返回了“成功”,它解决了这个问题。所以你的回答也帮助了我。谢谢【参考方案2】:

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

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

【讨论】:

这个解决方案不起作用,但是“Content-Type”标头起作用了。

以上是关于Firefox 错误“未找到元素”的主要内容,如果未能解决你的问题,请参考以下文章

CSS3 过渡/悬停效果在 Firefox 中不起作用; Firefox 错误?

尝试启动 Firefox 时出现 Python selenium 错误

在firefox v60.0.2中创建sdf提供错误(WebRTC,Firefox)

Firefox 画布上传错误

firefox+jquery 鼠标滚轮滚动事件错误

Opensuse 11 Firefox 上不显示 PHP 错误