2017-06-14 9 views
0

ich dieses Skript haben:jQuery warten, bis Funktion beendet

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

Ich möchte

d = d.split(","); 

Nur anrufen, nachdem ich bin sicher, dass d nicht undefined ist.
Wie führe ich das aus, nachdem die $.get Funktionen beendet und d den Daten zugewiesen ist?

+3

Setzen Sie es in den $ .get Callback? –

+0

@ Jonasw Entschuldigung, was ist ein Rückruf? Ich bin neu dazu ... – amitairos

+3

Platziere deinen Code einfach unter 'd = data;' (innerhalb der geschweiften Klammern); – Pugazh

Antwort

3

Sie könnten es einfach in den Rückruf setzen? :

$.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); 
     } 
    }); 

Oder ES7 (sehr neues Material) mit:

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

Sie müssen die JS setzen, die auf d hängt in der get Rückruf definiert ist.

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() ist asynchron, weil es eine Abkürzung für jQuery.ajax() ist, die für Anfragen Standardoption ist, ist async: true.

Read here über asynchrone Anfragen.

// 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

können Sie nur auf d verlassen, um einen Wert in dem Block zu haben, wo sie einen Wert zugeordnet, die function(data){...} innerhalb des Rückrufs ist.

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); 
    } 
    }); 
}); 
Verwandte Themen