php için jQuery (sonuç / bitiş kadar php komut dosyası için bekleyin)

4 Cevap php

I am executing a php call from javascript(jQuery), php sript is sending result back. The problem is that these php scripts are taking some time (milliseconds), and java script is not waiting for them to finish, thus variables are not getting initialized with correct values. The code is simple:

$.get("php/validation.php",{'email':email},function(data){
// valid_email now contains true/false
alert(data);
if(data=="true"){
var valid_email = true;}
}); 

"Uyarı" gerçek baskı ama valid_mail değeri aşağıdaki kodu "false" olarak kabul edilmektedir. Php scriptler çağırıyoruz ve onlar bitmedi kadar beklemek için başka iyi bir yolu var mı?

Prashant

4 Cevap

İşte function(data) uyumsuz denir; Bu PHP script bittikten sonra kadar bekler. O $.get() yığın altında herhangi bir kod, ancak yürütülür immediately. Aşağıdaki kodu da beklemek istiyorsanız, bu fonksiyon içine yukarı taşımak, ya da yeni bir fonksiyon içine koymak ve sadece aramak zorunda.

Bunu olduğunda tepki tepki değil, er gerekir. Tabii ki JavaScript çalışan tutar ve (aksi kullanıcı bekleme sırasında iplik engellemeyi çarpacaktır) yanıt beklemez. Bu gibi ayrı bir geri çağırma işlevi kullanarak çözmek ya:

function checkValidity(email, callback) {
  $.get("php/validation.php",{'email':email},function(data){
    // execute callback with true or false as the argument
    callback(data=="true");
  }
}

function showValidity(valid) {
  $("#someId").css("color", valid ? "green" : "red");
  // probably more
}

checkValidity($("#someField").text(), showValidity);

veya sağ $.get() kendisinin başarısı geri arama hareket ederek:

function checkValidity(email, callback) {
  $.get("php/validation.php",{'email':email},function(data){
    $("#someId").css("color", (data=="true") ? "green" : "red");
  }
}

Sen sonucunu işlemek için bir işlev için bir geri arama kullanmalısınız, sen $ çalıştırdıktan sonra doğrudan kullanamazsınız. Olsun.

Bkz: http://stackoverflow.com/questions/2956261/got-stuck-in-the-asynchronous-nature-of-ajax-requests/2956288

Tavsiyen için teşekkürler. Bu sorunun en çözmüştür ama hala aynı sorunu veriyor. Aşağıdaki fonksiyonu mail gönderiyor ama yine de "yanlış" koşulu idam oluyor.

$.post("php/send_email.php", $("#contact_form").serialize(),function(result){
    //and after the ajax request ends we check the text returned
    if(result == 'sent'){
    //and show the mail success div with fadeIn
    $('#mail_success').fadeIn(500);

    }else{
    //show the mail failed div
    $('#mail_fail').fadeIn(500);
    }
});