我有一个非常简单的电子邮件发送表单,只有一个电子邮件字段和一个textarea。
jQuery('#contact').validator().submit(function(e){
$.ajax({
type: "POST",
url: this.action,
data: {
mail: $('input[name="mail"]').val(),
message: $('textarea[name="message"]').val(), },
success: function(){
alert('yo');
}
});
e.preventDefault();
});
我的操作文件(send.php)只进行基本的电子邮件和textarea检查,然后使用mail()发送它们(如果已经过验证)。
我面临的问题是即使我发送错误的数据/所有字段都是空的,警告信息“yo”也会显示。
任何想法如何解决?当输入失败并且从send.php文件成功时,有什么方法可以“告诉”ajax吗?
我正在使用jQuery Tools Validator来验证字段,我知道有onSuccess操作,但在我的情况下不能使用那个。
答案 0 :(得分:4)
所以有两种方法可以做到这一点:
对于2,这里有可能的json响应(由你来决定你想要的任何约定)
// in case of success:
{status: 'ok', error: {errno: 0, msg: ""}}
// in case of error:
{status: 'fail, 'error: {errno: 1, msg: "invalid parameters"}}
然后在你的ajax调用中相应地处理响应
jQuery('#contact').validator().submit(function(e)
{
e.preventDefault();
$.ajax(
{
type: "POST",
dataType: 'json',
url: this.action,
mail: $('input[name="mail"]').val(),
message: $('textarea[name="message"]').val(),
success: function(data)
{
if (data && data.error && data.errorno)
{
// there is an application-level error. Hande it.
// ...
return;
}
alert('yo!);
}
});
});
还有一件事:如果你打算在所有情况下都做一个preventDefault()。您应该将该调用作为事件处理程序中的第一个条目。这将确保确实会阻止默认事件,以防函数的其余部分发生任何错误(导致其中止)。
答案 1 :(得分:1)
您需要让PHP以非200“OK”HTTP状态响应,或者检查PHP正在响应的消息,并相应地更改逻辑。
您会发现,如果您接受success
函数中的参数,例如`success:function(o)',来自AJAX调用的响应属性将有助于这样做。
一般情况下,使用AJAX查看一些其他示例(包括和不使用jQuery)都会做得很好。特别是http://api.jquery.com/jQuery.ajax/会有所帮助。