Die Flagge von dieser Antwort als ein doppelter Ton ist. Aber bis dahin werde ich dir sagen, warum es nicht funktioniert.
Denken Sie an diesem Code:
var a = 0;
function do_something() {
a = 1;
}
a = 2;
console.log(a);
do_something();
Was auf der Konsole ausgegeben wird? 2
. Nur weil der Code physikalisch über einem anderen Code liegt, heißt das nicht, dass er in dieser Reihenfolge aufgerufen wird. In diesem Beispiel ist das leicht zu erkennen, aber jetzt schauen wir uns Ihren Code an.
...
success: function(){
success = true
}
});
if(success){
window.open('http://whatismyipaddress.com/ip/'+click_ip)
}
...
Sie sehen, ist der Erfolg innerhalb die Rückkehr Funktion gesetzt wird. Das passiert erst zu einem späteren Zeitpunkt. Aber die nächste Zeile if(success)
, läuft sofort! Das bedeutet, dass der Erfolg noch nicht geändert wurde. Sie müssen window.open
innerhalb der Erfolg Rückruf auch verschieben. Das ist, wenn du willst, dass es passiert!
success: function(){
window.open('http://whatismyipaddress.com/ip/'+click_ip)
});
sehen, da es nicht asynchron ist überhaupt mit dem 'async: false' Flagge, es ist nicht wirklich ein Duplikat, aber wie die Flagge sollte nie verwendet werden und sollte entfernt werden, es ist immer noch ein Duplikat – adeneo