jquery到php(等待php脚本直到结果/完成)

时间:2010-06-02 16:33:46

标签: php jquery

我正在从javascript(jQuery)执行php调用,php sript正在发送结果。问题是这些PHP脚本需要一些时间(毫秒),并且java脚本不等待它们完成,因此变量不会使用正确的值进行初始化。 代码很简单:

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

“alert”打印为true,但valid_mail的值在下面的代码中被识别为“false”。还有其他更好的方法来调用php脚本并等待它们没有完成吗?

PRASHANT

4 个答案:

答案 0 :(得分:2)

异步调用function(data);它等到PHP脚本完成后才会等待。但是,$.get()块以下的任何代码都会立即执行 。如果你想让下面的代码等待,你必须把它移到那个函数中,或者把它放到一个新的函数中然后调用它。

答案 1 :(得分:1)

你必须在响应时做出反应,而不是更快。当然JavaScript一直在运行而不等待响应(否则用户会在等待期间注意到线程阻塞)。要么通过使用单独的回调函数来解决它,如下所示:

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

或在$.get()本身的成功回调中正确行事:

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

答案 2 :(得分:0)

你应该使用回调函数来处理结果,你不能在运行$ .get后直接使用它。

请参阅:How can I return a value from an AJAX request?

答案 3 :(得分:0)

感谢您的提示。它已经解决了大部分问题,但仍然存在同样的问题。以下功能是发送邮件,但仍然会执行“假”条件。

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