无法通过我的插件传递所有jQuery 1.4.2 Ajax单元测试

Gut*_*ter 2 javascript ajax jquery

我已经创建了一个插件,可以解决jQuery Ajax函数问题.运行Ajax单元测试1.4.2时无法找到的一个问题它不会通过这两个测试

  1. 带上下文的Ajax事件
  2. jQuery.ajax上下文修改

测试一个测试始终失败:

 function callback(msg){
  return function(){
   equals( this, context, "context is preserved on callback " + msg );
  };
 }
Run Code Online (Sandbox Code Playgroud)

this参考而不是被<div/>标签成为XPC跨源包装.

我的源代码在这里:

我可以在这里运行我对插件的单元测试:

可以在此处运行失败的单元测试:

需要注意的是,jQuery 1.4.2 Ajax不能使用FireFox 3.6.8处理301的服务器响应.它将返回0.我已经修改了我的jQuery库来解决这个问题.

还有一些JSONP停止计时.BUG#5383.

也许一些演示文稿问题和这个插件将为野外做好准备.

任何帮助,将不胜感激.包括设计.提前致谢.

Nic*_*ver 5

问题是你失去上下文的service.monitor调用最初传递时的方法success,error,beforeSendcomplete处理程序.

看一下ajaxMonitor.service.js,您需要用a替换每个原始处理程序调用.call()以维护正确的上下文:

1)在service.monitorSuccess()中:

origSuccess(data, textStatus, request);
//should be:
origSuccess.call(this, data, textStatus, request);
Run Code Online (Sandbox Code Playgroud)

2)在service.monitorError()中:

origError(request, status, errorThrown);
//should be:
origError.call(this, request, status, errorThrown);
Run Code Online (Sandbox Code Playgroud)

3)在service.monitorBeforeSend()中:

var abortEarly = origBeforeSend(request);
//should be:
var abortEarly = origBeforeSend.call(this, request);
Run Code Online (Sandbox Code Playgroud)

4)在service.monitorComplete()中:

var xhr = origComplete(request, status);
//should be:
var xhr = origComplete.call(this, request, status);
Run Code Online (Sandbox Code Playgroud)

我在这里复制了您的测试设置,以便您可以看到结果:http://ncraver.com/AjaxTest/

请注意其他一些测试失败...这些与我的更改无关,它们是我的网站没有运行PHP的结果,因此测试从这些.php页面得到不正确的响应:)