2017-06-14 37 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); 
    } 
    }); 
});