我已经用ajax发布了我的表单,一切都很好。就ajax而言,它使用responseText成功地处理了它的任务。但这并不意味着在我的例子中一切都是正确的。
ajax正在发布我的表单,该表单运行一个php文件将数据插入到我的数据库中。无论成功还是失败,都会有一个responseText,如果所有数据都已插入到数据库中,它会说:“谢谢”,如果插入失败,则会说"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');
}
发布于 2011-05-18 04:37:34
我建议在$.ajaxForm
调用中添加dataType: 'json'
属性。然后,在你的php中,不用返回“谢谢”,你可以返回:
return json(array('status'=>'success'));
或
return json(array('status'=>'failed'));
然后在show-response中你可以运行类似这样的命令:
if(responseText.status === 'failed') { // do something })
发布于 2011-05-18 04:34:00
您必须让您的PHP发送一个错误字符串,以便它出现在responseText中。然后,在您的JavaScript代码中,您必须解释该错误字符串。这不会是一个AJAX错误,因为就AJAX而言,一切都运行得很好。AJAX并不知道您的程序发现了错误;它只知道它发送了一个请求并得到了一个响应。
换句话说: AJAX和您的程序之间的权责分离意味着AJAX不允许干预您的程序操作。
发布于 2011-05-18 04:38:12
如果你检测到一个错误的服务器端,让你的php代码将响应状态设置为500并返回你的错误信息。这将触发ajaxForm的错误回调。
我不是一个PHP爱好者,所以我不确定你是如何将你的响应设置为500的,但是我在Asp.net中使用了这个方法,它工作得很好。
https://stackoverflow.com/questions/6036676
复制相似问题