不会从重写的JQuery ajax XHR对象调用Done / Fail

时间:2013-12-06 10:34:15

标签: javascript ajax jquery jquery-deferred

我用我的自定义实现覆盖了JQuery Ajax XHR对象,以便“伪造”服务器的服务器和服务器的响应。

我创建了一个简单的例子,我尝试在JS小提琴中实现 - 在JS部分我定义了非常简单的全局sendAjax()函数,假设使用$ .ajax()调用服务器:

window.sendAjax = function() {

    var jqxhr = $.ajax({
        url: "/ServerResource.txt"
    });

    jqxhr.done(function (data, textStatus, jqXHR) {
        //this is never called
        alert("done !")
    });

    jqxhr.fail(function (jqXHR, textStatus, errorThrown) {
        //this is never called
        alert("fail " + errorThrown);
    });
}

我也尝试使用我自己的XHR替换JQuery ajax xhr对象,我用自己的实现替换'send()'方法,假设返回一些数据而不是XHTTPrequest - 对于现在的JSfiddle,我将立即返回'成功'回应。问题是完成或失败的功能根本不会对我的响应做出反应:(

这是我对XHR的重新定义

//reload jquery ajax
var originalXhr = jQuery.ajaxSettings.xhr;
$.ajaxSetup({
    xhr: function () {
        var req = originalXhr();
        var deferred = $.Deferred();
        var promise = deferred.promise(req);
        if (req) {
            // Add your progress handler
            var _send = req.send;
            req.send = function (headers, complete) {
                //the one below does not work  
                setTimeout(function () {
                    deferred.resolve("Resolve promise", "OK", req);
                }, 200);
            }
            var _open = req.open;
            req.open = function () {
                console.log('OPEN AJAX called');
            }
        }

        return promise;
    }
});

我可能会做一些事情并且$ .Deferred不会以我不会的方式工作,但我无法想象到目前为止出了什么问题。 这是JS小提琴http://jsfiddle.net/ZwPXs/ - 你可能有一些想法吗?

致敬,Artem

0 个答案:

没有答案