[字号:  ]

Firefox下调试AJAX,著名错误0x80040111的解决思路

发布时间:2008-11-23 23:40   作者: sinopf   信息来源: PHPChina 开源社区门户
今天做AJAX的时候,在IE下调试一切正常,而到了Firefox下,问题就出来了,当我修改input中值的时候,调试台中显示:

CODE:

错误: [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [nsIXMLHttpRequest.status]"  nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)"  location: "JS frame :: http://localhost:8080/jk/inc/ajaxreg.js :: handleRequestStateChange_code :: line 196"  data: no]
源文件:http://localhost:8080/jk/inc/ajaxreg.js
行:196
找到这一行,代码是:

CODE:

if (request.status == 200) {}在百度和GOOGLE上搜索了个底朝天,没有找到好的解决办法,但存在这个问题的网友还真不少,大致可以找出问题存在于:由于重复提交XMLHttpRequest造成的,我 仔细检查了下代码,果然,大悟!请看下面代码:

CODE:

<input name="code" type="text" id="code" size="4" maxlength="4" class="textipt" onChange="codecheck('cd')" onBlur="codecheck('cd')"/>也就是当我改变INPUT的时候就验证,当INPUT失去焦点的时候也验证,当时这样设计并没有考虑到使用AJAX,现在问题出来了,修改INPUT后离开,同时也就失去了焦点,这样会极短的时间内验证两次,而此时XMLHttpRequest的值还没有返回回来就又被请求了一次,于是就出现了重复提交的错误。。
问题原因找到了,解决就很方便了,我把onChange="codecheck('cd')"删掉,毕竟修改INPUT后肯定是要离开INPUT使其失去焦点的嘛!
OK,一切正常,FF和IE都没有任何报错,而且功能正常实现。

最新回复

sinopf at 2008-11-23 23:44:21
本来想发到AJAX版面呢,那个版面人气太不行了,就发这里了,希望碰到这个问题的朋友可以看到。
i.don at 2008-11-23 23:53:57

谢谢。还没遇到这种问题,先作个记号。

[ 本帖最后由 i.don 于 2008-11-23 23:56 编辑 ]
ly5 at 2008-11-24 01:28:06
这只能说明你还没有把js的一些东西弄明白,在input type="text"上面用了onChange的同时还用onBlur有点冲突的,
onChange事件的触发也是需要文本框失去焦点后。
这样在第一次在文本框输入内容失去焦点后就会同时调用onChange和onBlur两个事件了。

下面是一个简单的例子,可以测试一下。

提示:您可以先修改部分代码再运行


[ 本帖最后由 ly5 于 2008-11-24 01:29 编辑 ]
sinopf at 2008-11-24 02:02:07
楼上说的很对,我也是排除错误是才发现的,,基础不够扎实啊。谢谢指点,我这个贴的主要目的还是给大家一个解决这个0x80040111错误的思路:查找重复提交XMLHttpRequest请求的地方。
ly5 at 2008-11-24 15:18:23
嗯,内容是否错,不过关健还是在源头解决好并发操作。
ddm at 2008-11-24 21:37:36
看了标题, 以为是教大家怎么在Firefox下调试AJAX
Krewson at 2008-11-25 15:20:27
firefox下有个add-on叫firebug,遇上它你也离不开它了
hansir at 2008-11-25 15:58:08
实时验证也可以, 但在发送请求前先要判断上回发的请求是不是已返回数据了...
0000. at 2008-12-02 13:35:39
在错误的代码上讨论没有任何价值。