我已经用ajax发布了我的表单,一切正常。就ajax而言,它使用responseText成功处理了它的工作。但这并不意味着在我的情况下一切都正确处理。
ajax正在发布我的表单,该表单运行一个php文件以将数据插入我的数据库。成功或失败,会有一个responseText,或者说:“谢谢”,如果所有数据都插入到db中,或者“Err:”,如果失败了。
如何从该responseText中创建if条件来处理那种自定义responseText错误?或者我可以强制它在“Err:”的responseText上返回.ajaxError()吗?
HTML表单:
<form method="post" action="contact.php" id="contact">
<fieldset>
<input type="text" id="email" class="required email" name="email" maxlength="30" value="youremail @ example.com" />
<input type="text" id="subject" class="required" name="subject" maxlength="24" value="Enter your subject" />
<textarea id="msg" class="required textarea" name="msg" cols="30" rows="5">Reason for contact.</textarea>
<input type="submit" class="formBtn" value="Punch me an Email" />
</fieldset>
</form>
JQuery的:
$(window).load(function(){
$('#contact').ajaxForm({
beforeSubmit:formValidate,
success: showResponse,
clearForm:true
});
});
function formValidate(){
$('#contact').validate({
rules:{
email:{required: true, email:true},
subject:{required: true, minlength: 5},
msg:{required: true, minlength: 50}
},
messages:{
email:'',
subject: '',
msg: ''
},
invalidHandler:function(){
$('div.error').hide();
},
focusInvalid:true,
onfocusout:false,
submitHandler: function() {
$('#contact').ajaxSubmit();
}
});
}
function showResponse(responseText,statusText,xhr,$form){
console.log(responseText);
// alert(responseText);
// $("#contact").toggle('slow');
}
答案 0 :(得分:1)
您必须让PHP发送错误字符串,使其出现在responseText中。然后在您的JavaScript代码中,您将必须解释该错误字符串。它不会是一个AJAX错误,因为就AJAX而言,一切都运行得很漂亮。 AJAX不知道你的程序发现了错误;它只知道它发送了一个请求并得到了回复。
换句话说:AJAX与您的程序之间的权力和责任分离意味着AJAX不允许干预您的程序操作。
答案 1 :(得分:1)
我建议将dataType: 'json'
属性添加到您的$.ajaxForm
来电。然后在你的PHP而不是返回'谢谢'你可以返回:
return json(array('status'=>'success'));
或
return json(array('status'=>'failed'));
然后在show-response中你可以运行类似的东西:
if(responseText.status === 'failed') { // do something })
答案 2 :(得分:1)
如果您检测到错误服务器端,请让您的php代码将响应状态设置为500并返回错误消息。这将触发ajaxForm的错误回调。
我不是一个PHP人,所以我不确定你是如何设置你的响应500,但我在Asp.net上使用这个方法,它运作得很好。
答案 3 :(得分:1)
我曾经返回200,无论是否发生错误,我通过返回不同的字符串消息返回错误代码,但根据RESTful结构,这不是一个好习惯。 Here's a link关于我所说的内容。
因此,在服务器端代码中抛出适当的异常似乎是最佳做法。
抛出新的异常('分区 零');
当发生这种情况时,您的ajax客户端将获得Http状态代码(500)的响应。 Jquery使用此状态代码(500 =内部服务器错误)理解并触发错误(jqXHR,textStatus,errorThrown)事件,它将返回您的自定义异常详细信息。
然后,您可以解析这3个参数并对您的客户进行适当的响应。