我创建了一个插件来鸭击 jQuery Ajax 函数。 1.4.2运行Ajax单元测试时找不到的一个问题它不会通过两个测试
- 带有上下文的 Ajax 事件
- jQuery.ajax 上下文修改
测试一有一个总是失败的测试:
function callback(msg){
return function(){
equals( this, context, "context is preserved on callback " + msg );
};
}
this
引用而不是 <div/>
标签成为 XPC Cross Origin Wrapper。
My unit tests for the plug-in can be run here:
The failing unit tests can be run here:
需要注意的是,jQuery 1.4.2 Ajax 不处理 FireFox 3.6.8 的服务器响应 301。它将返回为 0。我已经修改了我的 jQuery 库来解决这个问题。
还有一些 JSONP 秒表计时。 BUG #5383 .
也许还有一些演示问题,这个插件将准备好投入使用。
如有任何帮助,我们将不胜感激。包括设计。提前致谢。
最佳答案
问题是,在调用最初传递的 success
、error
、 时,您在
和 service.monitor
方法中丢失了上下文beforeSendcomplete
处理程序。
看看ajaxMonitor.service.js
,您需要将每个原始处理程序调用替换为 .call()
保持适当的上下文:
1) 在service.monitorSuccess()中:
origSuccess(data, textStatus, request);
//should be:
origSuccess.call(this, data, textStatus, request);
2) 在service.monitorError()中:
origError(request, status, errorThrown);
//should be:
origError.call(this, request, status, errorThrown);
3) 在service.monitorBeforeSend()中:
var abortEarly = origBeforeSend(request);
//should be:
var abortEarly = origBeforeSend.call(this, request);
4) 在service.monitorComplete()中:
var xhr = origComplete(request, status);
//should be:
var xhr = origComplete.call(this, request, status);
我在这里复制了您的测试设置,以便您可以看到结果:http://ncraver.com/AjaxTest/
请注意,一些其他测试失败...这些与我的更改无关,它们是我的网站未运行 PHP 的结果,因此测试从这些 .php
页面:)
关于javascript - 使用我的插件无法通过所有 jQuery 1.4.2 Ajax 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3419782/