我正在从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
答案 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后直接使用它。
答案 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);
}
});