2017-06-14 34 views
0

我有這樣的腳本:的jQuery等到函數完成

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分配給數據之後執行該操作?

+3

把它放到$ .get回調中? –

+0

@Jonasw對不起,什麼是回調?我是新來的... – amitairos

+3

只需將你的代碼放在'd = data;'(在大括號內); – Pugazh

回答

3

你可以簡單地把它放入回調? :

$.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(","); 
... 
})(); 
2

你需要把依賴於d爲GET回調中定義的JS。

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

jQuery.get()是異步的,因爲它是jQuery.ajax的簡寫()誰的請求的默認選項爲異步:真

Read here關於異步請求。

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

只能依靠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); 
    } 
    }); 
});