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

我正在从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

function(data)是异步调用的; 它等到PHP脚本完成后才会等待。 但是, $.get()块之下的任何代码都会立即执行。 如果您希望下面的代码也等待,您必须将其移动到该函数中,或者将其放入新函数中并调用它。

你必须尽快对响应作出反应。 当然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"); } } 

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

请参阅: 如何从AJAX请求中返回值?

谢谢你的提示。 它解决了大部分问题,但仍有一个问题。 下面的function是发送邮件但仍然执行“假”条件。

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