Thi*_*zar 3 jquery return function wait
我有一个jquery函数用于发送带有ajax请求的电子邮件;
function sendMail(from,to,subject,message){
var datastr="from="+from+"&to="+to+"&subject="+subject+"&message="+message;
$.ajax({
type: "POST",
url: "mail.php",
data: datastr,
cache: false,
success: function(html){
return true;
},
error: function(jqXHR,status,error){
return false;
}
});
}
Run Code Online (Sandbox Code Playgroud)
现在我想告诉用户邮件是否成功发送或不是这样的:
$("#feedback").html("Sending email...");
if(sendMail("from@email.com","to@email.com","MySubject","MyMessage"))
$("#feedback").html("Email sent.");
else
$("#feedback").html("Error sending email.");
Run Code Online (Sandbox Code Playgroud)
但是当然jQuery在发送邮件之前处理if条件,所以条件是假的:-(我怎么告诉jQuery要等到sendMail完成并返回一些东西?
虽然给定的答案是有效的,但我会考虑将sendmail
函数和DOM修改分开(即保持$("#feedback").html...
不在success/error
回调中).您可以通过返回ajax
调用结果来执行此操作:
function sendMail(from,to,subject,message){
var datastr="from="+from+"&to="+to+"&subject="+subject+"&message="+message;
return $.ajax({
type: "POST",
url: "mail.php",
data: datastr,
cache: false
});
}
Run Code Online (Sandbox Code Playgroud)
返回值实现Promise接口,因此您可以执行以下操作:
$("#feedback").html("Sending email...");
sendMail("from@email.com","to@email.com","MySubject","MyMessage")
.done(function(){
$("#feedback").html("Email sent.");
})
.fail(function(){
$("#feedback").html("Error sending email.");
});
Run Code Online (Sandbox Code Playgroud)
请注意,我从ajax调用中删除了success
和error
字段,因为它们不需要,但如果您需要其他内容(例如日志记录),您仍然可以使用它们.