如何处理具有条件的ajax resonseText

我已经用ajax发布了我的表单,一切正常。 就ajax而言,它使用responseText成功处理了它的工作。 但这并不意味着在我的情况下一切都正确处理。

ajax发布了我的表单,它运行一个php文件将数据插入我的数据库。 成功或失败,会有一个responseText,或者说:“谢谢”,如果所有数据都插入到db中,或者“Err:”,如果失败了。

如何从responseText中创建if条件来处理那种自定义responseText错误? 或者我可以强制它在“Err:”的responseText上返回.ajaxError()吗?

HTML表单:

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'); } 

我建议将dataType: 'json'属性添加到$.ajaxForm调用中。 然后在你的PHP而不是返回’谢谢’你可以返回:

 return json(array('status'=>'success')); 

要么

 return json(array('status'=>'failed')); 

然后在show-response中你可以运行如下:

 if(responseText.status === 'failed') { // do something }) 

您必须让PHP发送一个错误字符串,使其出现在responseText中。 然后在您的JavaScript代码中,您将必须解释该错误字符串。 它不会是一个AJAX错误,因为就AJAX而言,一切都运行得很漂亮。 AJAX不知道你的程序发现错误; 它只知道它发送了一个请求并得到了回复。

换句话说:AJAX和程序之间的权力和责任分离意味着AJAX不允许干预程序的操作。

如果您检测到错误服务器端,请让您的php代码将响应状态设置为500并返回错误消息。 这将触发ajaxForm的错误回调。

我不是一个PHP人,所以我不确定你如何设置你的响应500,但我使用这个方法与Asp.net,它的工作完美。

我曾经返回200,无论是否发生错误,我通过返回不同的字符串消息返回错误代码,但根据RESTful结构,这不是一个好习惯。 这是关于我所指的内容的链接 。

因此,在服务器端代码中抛出适当的exception似乎是最佳做法。

抛出新的exception(’除以零。’);

当发生这种情况时,您的ajax客户端将获得Http状态代码(500)的响应。 Jquery使用此状态代码(500 =内部服务器错误)理解并触发错误(jqXHR,textStatus,errorThrown)事件,它将返回您的自定义exception详细信息。

然后,您可以解析这3个参数并对您的客户端给出正确的响应。