我最近在小看Ajax轮询技术。 但是,我似乎无法从xmlhttprequestfirefox(3.6.7)对象中覆盖处理程序。
在跟踪FF为什么在尝试访问时引起异常问题时,onreadystatechange注意到send ()依赖于是否调用了方法。
这是一个有效的示例(纯js,以前没有jQuery )。
(这只是为了演示而简化了很多)
var myxhr=new XMLHttpRequest (;
myxhr.open('get )、'/my/index.php );
my xhr.onreadystatechange=function (
控制台. log (就绪状态更改);
(;
控制台. log (onreadystatechangefunction : (,myxhr.onreadystatechange );
myxhr.send(null );
更好的是,myxhr.onreadystatechange可以在此访问。 如果我在最后两行代码之间切换,FF会引发异常,基本上它会告诉我不允许访问此对象。
myxhr.send(null );
控制台. log (onreadystatechangefunction : (,myxhr.onreadystatechange );
失败
那么我的实际问题在哪里?
是的,我想用jQuery的$.ajax (。 但是,如果尝试覆盖来自返回onreadystatechange的XHR对象的方法,$.ajax ()将收到相同的FireFox异常。
是的,我知道为什么会发生这种事,所以我想。 喂,那个beforeSend属性$.ajax ()是什么? 所以我基本上尝试了这个:
var myxhr=$.ajax({ (
url: '/my/index.php ',
类型: ' get ',
dataType: 'text ',
数据: {
foo: '1'
(,
before send :功能(xhr ) {
varreadystatehook=xhr.onreadystatechange;
xhr.onreadystatechange=function (
就绪状态hook.apply (this,[];
控制台. log (fired );
(;
(,
success :功能(data ) {
控制台. log (数据;
(,
错误:功能(xhr,文本状态,错误) {
控制台. log (xhr.statustext,textStatus,error );
}
);
你觉得是什么? 福克斯引起了异常。 你现在怎么办? 你像我一样深入jQuery源代码。 但是,那个会带来比回答更多的问题。 看起来好像在beforeSend (是xhr.send ) )运行之前确实进行了调用。 所以我想知道为什么不允许FireFox在这一点上覆盖处理程序。
结论?
是否要在jQuery/Firefox中创建一个自定义就绪状态更改处理程序?