JQuery:if-else之后的Done()

时间:2014-08-04 13:58:21

标签: javascript jquery ajax

使用ajax calls我们可以在使用done()-function

运行后执行操作
$.ajax({
        .....
      })
 .done ( function(data) {
        ..... (manipulate data using $.ajax result
      })

现在我有一个if-else子句,其中包含ajax-embedded

  if (some condition)
  { //Standard  HTML-element/tag manipulation
       $("#obj1").append('<a class="trigger">Click Me </trigger>');
       $(".SomeClass").remove();
       ......
  }
  else
  { 
     //HTML-element/tag manipulation after $.ajax-call 
     $.ajax({
       //perform ajax-call
     })
     .done(function (data) {
          $("#obj1").append('<a class="trigger">' data.someProp '</trigger>');
      })
  }

  //Perform actions: Part2
  $(".trigger").Click(function() { Somefunction() });

我想知道Jquery是否提供了一种方法来执行functions in Part2暂停,直到if-else内的所有操作都完成(包括$.ajax)?我似乎无法使用谷歌找到任何相关信息(很可能我只是使用了错误的关键字)。

我希望我的问题对每个人都是可以理解的。如果您需要进一步的信息,请不要犹豫。

3 个答案:

答案 0 :(得分:1)

在这种情况下,您可以使用jQuery promise。 http://api.jquery.com/deferred.done/

var dfd = null; 

if (some condition)
  { //Standard  HTML-element/tag manipulation
       $("#obj1").append('<a class="trigger">Click Me </trigger>');
       $(".SomeClass").remove();
       ......
      //Create Deferred object and resolve immediately
      dfd = $.Deferred();
      dfd.resolve();
  }
  else
  { 
     //HTML-element/tag manipulation after $.ajax-call 
    //$.ajax returns Deferred 
    dfd = $.ajax({
       //perform ajax-call
     })
     .done(function (data) {
          $("#obj1").append('<a class="trigger">' data.someProp '</trigger>');
      })
  }

  //Use when for waiting the Deferred to get resolved
  $.when(dfd).then(function(){
        //Perform actions: Part2
       $(".trigger").Click(function() { Somefunction() });
  })

答案 1 :(得分:1)

我做这样的事情:

  if (some condition)
  { //Standard  HTML-element/tag manipulation
       $("#obj1").append('<a class="trigger">Click Me </trigger>');
       $(".SomeClass").remove();
       ......
       Part2();
  }
  else
  { 
     //HTML-element/tag manipulation after $.ajax-call 
     $.ajax({
       //perform ajax-call
     })
     .done(function (data) {
          $("#obj1").append('<a class="trigger">' data.someProp '</trigger>');
          Part2();
      })
  }

function Part2()
{
    $(".trigger").Click(function() { Somefunction() });
}

答案 2 :(得分:1)

您应该使用'同步AJAX请求'

    //HTML-element/tag manipulation after $.ajax-call 
     $.ajax({
       //perform ajax-call
       **async: false**
     })
     .done(function (data) {
          $("#obj1").append('<a class="trigger">' data.someProp '</trigger>');
      })