2011-07-13 11 views
1

私はいくつかのコードを設定しました。私は非常に単純なAPIをajaxリクエストに使用したいと思います。jQuery - Ajax関数の遅延を成功させるにはどうすればいいですか?

私がしたいことは、何とか成功を返すために何らかの方法で遅延使用が使われていることです。私はこのようにそれを使用することができることなど

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? 
     }) 
    } 
}; 

このような何かによって呼び出さなるだろう

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 ...*/} 
}); 

:基本的に、オブジェクトはdataTools.foo成功から値を返します

$.each(dataTools.foo(), function(k,v){ 
    console.log(v); 
}); 

、失敗した場合の空のセット、またはそのコードブランチをスキップするものを返す必要があります。

私は$.when().then()を使用しようとしましたが、ここで説明したようにそれをどのように適合させるかわかりません。

+0

あなたは 'VARのデータツール= {'を書くこともしかして:このような何かを試してみてくださいdoc


で述べているよう

あなたが何かをする必要がありますか? – Neal

+0

ありがとうございました。 – Incognito

+0

成功関数を「延期」する目的は何ですか?あなたは再利用可能なリクエストオブジェクトを構築しようとしていますか? –

答えて

1

Ajaxは非同期です。

$.eachを非同期機能で使用することはできません。

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 ] */ 
     }); 
    } 
}; 
関連する問題