0

私はこのようなことをしたい:

$.ajax({
  url: SOMEWHERE,
  ...
  success: function(data){
    // do sth...
    var new_url = data.url;

    $.ajax({
      url: new_url,
      success: function(data){
        var another_url = data.url;

        // ajax call rely on the result of previous one
        $.ajax({
           // do sth
        })
      }
    })
  },
  fail: function(){
    // do sth...

    // ajax call too
    $.ajax({
      // config
    })
  }
})

コードは私にとってひどいようです。

どうやったら綺麗に撮れるのかしら。いくつかのベストプラクティス?

4

4 に答える 4

0

$.ajaxの代わりに$.postを使用すると、はるかに簡単でクリーンになります

$.post('yourAjaxUrl.com/index.html',(newVal:'val'), function(data) {
     $.post('yourSecondAjaxUrl.com/index.html',{newVal1:data}, function(data) {
              //do something 
     });
});

または、GETリクエストを使用する場合は、次のように使用します。

$.get('yourAjaxUrl.com/index.html',(newVal:'val'), function(data) {
     $.get('yourSecondAjaxUrl.com/index.html',{newVal1:data}, function(data) {
              //do something 
     });
});
于 2012-11-29T05:05:00.497 に答える
0

私はそれを分割することを検討します、おそらくこのようなものです。

function initialSuccessHandler(data) {
    $.ajax({url:data.url, success:secondarySuccessHandler});
}

function secondarySuccessHandler(data) {
    //do stuff
}

function initialFailHandler() {
    $.ajax({...});
}

$.ajax({url:"whatever.com", success:initialSuccessHandler, fail: initialFailHandler});
于 2012-11-29T04:59:09.067 に答える
0

成功関数が似ている場合 (たとえば、新しい AJAX 呼び出しに別の URL が必要なだけ) を除いて、おそらくそれについてできることはあまりありません。次のように、再帰的に呼び出す共通関数を定義できる可能性があります。

function do_something(data) {
    // some logic
    $.ajax({
        url: data.url,
        success: do_something(data);
        fail: function (){
            // handle failure
        }
    });
}
于 2012-11-29T05:01:08.260 に答える
0

多くの場合、関数を使用するとコードが確実に役立つため、他の答えもほとんど問題ありません。関数の問題は、一度に多くのことを行っていることです。機能の複雑さを減らすと、LOT (異なる機能で異なるアクションを分離する) に役立ちます。

機能の複雑さを軽減するのに役立つ Bocoup の優れたトレーニング ビデオがいくつかあります: http://training.bocoup.com/screencasts/

ただし、コールバック インフェルノに対する基本的な答え: jquery Deffered
を 使用すると、「運命のインデント ピラミッド」を防ぐことで、特定のケースで適切な仕事をすることができます。(ただし、関数の複雑さは減りません)

$.ajax({
  url: SOMEWHERE
})
.pipe(function() {

  // First success callback
  return $.ajax({
    url: new_url
  });

}, function() {

  // First error callback
  $.ajax({
    // config
  });

  // we ain't returning anything so this end here.

})
.done(function( data ) {

  // Second success callback
  var another_url = data.url;

  // ajax call rely on the result of previous one
  $.ajax({
    // do sth
  })

});

Deferred はより多くのコンテキストに適合する可能性があり、それらについて学ぶことは非常に役立ちます。それは彼らの背後にある基本的な考え方にすぎません。

この助けを願っています!

于 2012-11-29T05:07:22.937 に答える