如何处理带条件的ajax响应文本

时间:2011-05-17 20:25:56

标签: javascript jquery ajax

我已经用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');
}

4 个答案:

答案 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个参数并对您的客户进行适当的响应。