jQuery-仅在成功时延迟ajax函数返回?

jQuery-仅在成功时延迟ajax函数返回?,jquery,ajax,asynchronous,jquery-deferred,Jquery,Ajax,Asynchronous,Jquery Deferred,我已经设置了一些代码,我想为ajax请求提供一个非常简单的API 所以,我想做的就是用延迟来回报成功 var factory = function(dataParams) { return $.ajax({ type : "POST", dataType : "json", url : "http://example.com/whatever", data : dataParams,

我已经设置了一些代码,我想为ajax请求提供一个非常简单的API

所以,我想做的就是用延迟来回报成功

var factory = function(dataParams) {
    return $.ajax({
        type       : "POST",
        dataType   : "json",
        url        : "http://example.com/whatever",
        data       : dataParams,
        beforeSend : function(jqXHR, settings){/*... something here ...*/},
        error      : function(jqXHR, textStatus, errorThrown){/*... something here ...*/},
        complete   : function(jqXHR, textStatus) {/*... something here ...*/}
});
它会被这样的东西调用

var dataTools = {
    "foo" : function(){
        factory({"One": 1}).success(function(jqXHR){
            //Do something to jqXHR
            //Return something to the "upper most" calling... how?
        })
    }
    "bar" : function(){
        factory({"Two": 2}).success(function(jqXHR){
            //Return jqXHR to the "upper most" calling... how?
        })
    }
};
这样我就可以这样使用它:

$.each(dataTools.foo(), function(k,v){
    console.log(v);
});
基本上,对象
dataTools.foo
从success返回一个值,或者,应该在失败时返回一个空集,或者跳过该代码分支的某个对象


我尝试过使用
$.when().then()
,但我似乎不知道如何将其应用到我在这里描述的内容中。

Ajax是异步的

不能在异步函数上使用
$。每个

您不能让一个函数调用一个调用ajax的函数,然后期望使用
$。when
和相关函数

你需要像


试着这样做:

var dataTools = {
    "foo" : function(){
        $.when(factory({"One": 1})).done(function(a1, a2){
            var jqXHR = a1[2]; /* arguments are [ "success", statusText, jqXHR ] */
        });
    }
    "bar" : function(){
        $.when(factory({"Two": 2})).done(function(a1, a2){
            var jqXHR = a1[2]; /* arguments are [ "success", statusText, jqXHR ] */
        });
    }
};

Ajax是异步的

不能在异步函数上使用
$。每个

您不能让一个函数调用一个调用ajax的函数,然后期望使用
$。when
和相关函数

你需要像


试着这样做:

var dataTools = {
    "foo" : function(){
        $.when(factory({"One": 1})).done(function(a1, a2){
            var jqXHR = a1[2]; /* arguments are [ "success", statusText, jqXHR ] */
        });
    }
    "bar" : function(){
        $.when(factory({"Two": 2})).done(function(a1, a2){
            var jqXHR = a1[2]; /* arguments are [ "success", statusText, jqXHR ] */
        });
    }
};

你是想写
var-dataTools={
?你“推迟”success函数的目的是什么?你是想构建一个可重用的请求对象吗?@Derek-Adair,是的。我想用它来获取一些数据,并在完成后返回所有数据,而不是使用回调。你是想写
var-dataTools={
?您“推迟”成功函数的目的是什么?您是否试图构建一个可重用的请求对象?@Derek Adair,是的。我想用它作为一种手段来获取一些数据,并在完成后返回所有内容,而不是使用回调。