2011-05-17 71 views
1

我已经使用ajax发布了我的表单,并且所有工作都很好。就ajax而言,它使用responseText成功处理了它的工作。但这并不意味着在我的情况下所有的处理都是正确的。如何使用条件处理ajax resonseText

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

如何从该responseText处理这种自定义responseText错误的if条件?或者我可以强制它在“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

我们走了。抱歉忘了把代码放在那里。 – robx 2011-05-17 20:33:40

回答

1

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

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

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

然后在显示响应,您可以运行类似:

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

这很好,但我不得不在PHP中打印出来以获得responseText。如果我告诉它返回一个json_encode(数组),我什么都没有返回。 – robx 2011-05-17 22:35:46

+0

对不起,我很习惯使用特定的框架......是的,你需要打印出来......你可能还需要为JSON设置适当的Content-type头。 – 2011-05-18 03:36:56

1

你必须让你的PHP来发送一个错误字符串,它出现在responseText的。然后在您的JavaScript代码中,您必须解释该错误字符串。它不会是一个AJAX错误,因为就AJAX而言,一切都运行良好。 AJAX不知道你的程序发现错误;它只知道它发送了一个请求并得到了回应。换句话说,AJAX和你的程序之间的权力和责任分离意味着AJAX不允许干预你程序的运行。

+0

对,所以我可以在alert或console.log中看到它返回成功或错误消息,但我似乎无法从responseText中获取条件。我尝试过使用responseText.Search(“错误”),但这打破了我的整个js验证过程。 – robx 2011-05-17 20:36:58

+0

@robx:你试过if(responseText ==“Error”)/ * foo * /'吗? – 2011-05-17 20:40:33

+0

@robx - 它看起来像responseText是空的。当你取消注释“alert(responseText)”时,你看到了什么?“? – 2011-05-17 21:00:06

1

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

我不是一个PHP家伙,所以我不知道你是如何设置你的响应500,但我用这个方法与Asp.net和它完美的作品。

1

无论发生错误,我都会返回200,并且我通过返回不同的字符串消息来返回错误代码,但根据RESTful结构,这不是一个好的做法。 Here's a link关于我指的是什么。

因此,在您的服务器端代码中引发适当的异常似乎是最佳做法。

抛出新的异常('除以 零。');

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

然后,您可以解析这3个参数并给予您的客户适当的响应。