簡體   English   中英

jQuery等到函數完成

[英]jQuery wait till function finishes

我有這個腳本:

var d;
$(".circle").click(function() {
    var id = $(this).attr('id');
    var MyDiv1 = document.getElementById(id);
    var name = MyDiv1.innerHTML;

    $.get("url", function(data){
    d=data;
    });

    d=d.split(",");
    var arrayLength = d.length;
    for (var i = 0; i < arrayLength; i++) {
        if(i==id)
         custom_alert(d[i], name);
    }
});

我想打電話

d = d.split(",");

只有在我確定d不是undefined
$.get函數完成並將d分配給數據之后,我該如何執行呢?

您可以簡單地將其放入回調中?

    $.get("url", function(d){
         d=d.split(",");
         var arrayLength = d.length;
         for (var i = 0; i < arrayLength; i++) {
           if(i==id)
            custom_alert(d[i], name);
         }
    });

或使用ES7(非常新的東西):

(async function(){
var d=await new Promise(function(r){
  $.get("url",r);
});
d=d.split(",");
...
})();

您需要將依賴於d的JS放在get回調中。

var d;
$(".circle").click(function() {
var id = $(this).attr('id');
var MyDiv1 = document.getElementById(id);
var name = MyDiv1.innerHTML;

$.get("url", function(data){
d=data;

   d=d.split(",");
   var arrayLength = d.length;
   for (var i = 0; i < arrayLength; i++) {
    if(i==id)
     custom_alert(d[i], name);
   }
 });
});

jQuery.get()是異步的,因為它是jQuery.ajax()的縮寫,請求的默認選項是async:true

在此處閱讀有關異步請求的信息。

// declare it here if you need its values later (to be a global variable), or move it inside function(){ } declared inside $.get() call.
var d;
$(".circle").click(function() {
    var id = $(this).attr('id');
    var MyDiv1 = document.getElementById(id);
    var name = MyDiv1.innerHTML;

    $.get("url", function(data){
         d=data;
         // $.get has an asynchronous answer (you don't know when it will come or if it comes). Call d.split here
         d=d.split(",");
         var arrayLength = d.length;
         for (var i = 0; i < arrayLength; i++) {
             if(i==id)
              custom_alert(d[i], name);
        }
    }); 
 });

您只能依靠d在為其分配了值的塊中有一個值,該值位於回調function(data){...}

var d;
$(".circle").click(function() {
  var id = $(this).attr('id');
  var MyDiv1 = document.getElementById(id);
  var name = MyDiv1.innerHTML;

  $.get("url", function(data){
    d=data.split(",");
    var arrayLength = d.length;
    for (var i = 0; i < arrayLength; i++) {
      if (i==id)
        custom_alert(d[i], name);
    }
  });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM