2 Stimmen

JQuery IF-Anweisung funktioniert nicht

Ich führe eine AJAX-Abfrage durch, um den Namen eines Autos in einer MySQL-Datenbank zu überprüfen. Wenn ein Auto gefunden wird, wird "Autoname nicht verfügbar" zurückgegeben, sonst "Autoname verfügbar". Dieser Text wird in ein div mit einer id von "checkname" eingefügt.

All dies läuft gut, aber wenn ich versuche, den Hinzufügen-Button auszublenden, wenn der Autoname nicht verfügbar ist, schafft er es nicht und ich weiß nicht warum :/

function check_name(){

 $.ajax({
  type: "POST",
  url: "http://localhost/Framework/library/php_files/check_car_name.php",
  data:  "carName=" + document.getElementById("carName").value,
  success: function(html){
   $("#checkname").html(html);
  }
 });

 var currentHtml = $("#checkname").html();
 var compareString = "Car name unavailable";

 if (currentHtml==compareString) {
  $("#submit").hide();
 } else {
  $("#submit").show();
 }

}

7voto

user113716 Punkte 309387

Der Grund dafür ist, dass Code, der auf die Antwort des AJAX-Requests angewiesen ist, innerhalb eines Callbacks zum Request aufgerufen werden muss.

function check_name() {
    $.ajax({
        type: "POST",
        url: "http://localhost/Framework/library/php_files/check_car_name.php",
        data: "carName=" + document.getElementById("carName").value,
        success: function (html) {
            $("#checkname").html(html);

             // Deinen Code habe ich hier platziert.
             // Natürlich müsstest du nicht den HTML-Wert setzen und dann abrufen,
             //    da du direkt einen Vergleich durchführen könntest.
            var currentHtml = $("#checkname").html();
            var compareString = "Car name unavailable";
            if (currentHtml == compareString) {
                $("#submit").hide();
            } else {
                $("#submit").show();
            }
        }
    });
}

Ein weiteres mögliches Problem beim Vergleich von HTML ist die Berücksichtigung von Leerzeichen. Wenn du einen Stringvergleich durchführst, muss er exakt der gleiche sein. Wenn Leerzeichen vorhanden sind, musst du ihn zuerst trimmen. Dafür kannst du jQuery.trim()(Dokumentation) verwenden.

0voto

Fermin Punkte 33476

Du musst den Code im Success-Callback deiner AJAX-Anfragen platzieren, da er ansonsten aufgerufen wird, bevor der AJAX-Aufruf abgeschlossen ist. Wenn du ihn im Success-Callback platzierst, bedeutet das, dass der Code mit der IF-Anweisung erst nach Abschluss des AJAX-Aufrufs ausgeführt wird. Versuche es so:

function check_name(){

 $.ajax({
  type: "POST",
  url: "http://localhost/Framework/library/php_files/check_car_name.php",
  data:  "carName=" + document.getElementById("carName").value,
  success: function(html){
   $("#checkname").html(html);

var currentHtml = $("#checkname").html();
 var compareString = "Car name unavailable";

 if (currentHtml==compareString) {
  $("#submit").hide();
 } else {
  $("#submit").show();
 }
  }
 });

}

0voto

The Coding Monk Punkte 7354

Sie könnten das Problem wahrscheinlich lösen, indem Sie das tun, was Patrick DW vorgeschlagen hat (es ist wahrscheinlich, dass der Ajax-Aufruf noch nicht abgeschlossen wurde (d.h. der Div-Inhalt wurde nicht aktualisiert) und die Überprüfung falsch zurückgibt), aber da Zeichenfolgenvergleiche wirklich zu vielen Fehlern führen können (z.B. Zeichenfolge stimmt nicht überein wegen Zeilenumbrüchen, Leerzeichen am Ende, Groß- und Kleinschreibung usw...), würde ich Ihnen empfehlen, eine andere Vergleichsmethode zu verwenden.

Zum Beispiel könnten Sie eine Klasse hinzufügen, wenn das Auto gefunden wurde, und dann überprüfen, ob dieses Div die "gefunden" Klasse mit .hasClass() hat

0voto

pax Punkte 1

Ich benutze .post(). Das dritte Argument von post() ist die zurückgegebene Daten aus der Datei, in die die Daten übermittelt wurden.

Ich gebe validate.php die eingegebene E-Mail-Adresse, validate.php überprüft sie und gibt bei Erfolg 1 zurück.

$('a.post').click(function() {
$.post('validate.php',{email : $("#email-field").val()}, 

function(data){
if(data==1)     
{  
//etwas tun, wenn die E-Mail gültig ist
} else { 
//etwas anderes tun
});

});

Hoffentlich hilft das weiter.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X