2016-10-14 4 views
0

Ich habe Knopf wie folgt.JQuery Ajax POST funktioniert nicht in Funktion

<input onclick="reply_click(this.id,this.name)" target="_blank" type="submit" id="'+clickid+'" name="'+click_ip+'" value="Check"> 

Und Javascript wie folgt.

In Alert funktioniert ordnungsgemäß, aber Daten nicht an die Datenbank senden. Wie behebt man das?

Danke ...

+0

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

Antwort

0

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.openinnerhalb der Erfolg Rückruf auch verschieben. Das ist, wenn du willst, dass es passiert!

success: function(){ 
    window.open('http://whatismyipaddress.com/ip/'+click_ip) 
}); 
+1

Eine kürzere Zusammenfassung ist: Der '$ .ajax' Aufruf sagt" Ich mache das später, mach weiter für jetzt ", damit der Code nach * vor * dem Code läuft. So wurde der Erfolg nicht festgelegt, wenn Sie es überprüfen. –

+0

Außer dass er async: false hat, also sollte es in der Reihenfolge ausgeführt werden. – Barmar