在提交$ .POST表单时如何通过jQuery找到httpStatusCode?

时间:2013-06-17 10:07:10

标签: jquery ajax post nginx http-status-codes

我制作了一个简单的HTML表单,我想将其发布到FreshDesk(票证应用程序)。表单通过AJAX提交后。我想将用户重定向到一个页面。

如何返回HTTP状态代码并使用它们进行条件化?

var formData = new FormData(document.getElementsByName('fd_feedback_widget')[0]);// yourForm: form selector        
$.ajax({
        type: "POST",
        url: "http://somedomain.freshdesk.com/widgets/feedback_widget",
        // where you wanna post
        data: formData,
        processData: false,
        contentType: false,
        error: function(jqXHR, textStatus, errorMessage) {
             console.log(errorMessage); // Optional
        },
        success: function(data) {


            if(statusCode==200){
                window.location="/thanks";
            }

        } 
});

statusCode变量就是我所追求的。如果我使用console.log(data)它在Firebug中显示200 OK,但我得到的错误首先是不重定向,其次,Firebug吐出(an empty string)

如果有任何差异(https://serverfault.com/questions/196929/reply-with-200-from-nginx-config-without-serving-a-file

,我正在使用NGINX

2 个答案:

答案 0 :(得分:1)

ajax()提供了一个名为statusCode的选项,您可以使用该选项根据您获得的状态代码执行操作。来自文档:

  

当响应具有相应代码时要调用的数字HTTP代码和函数的对象。如果请求成功,则状态码函数采用与成功回调相同的参数;如果它导致错误(包括3xx重定向),则它们采用与错误回调相同的参数。

因此,基于此,您可以说statusCode的类型决定下一个应该调用的函数 - 成功还是错误。

以下是你的表现:

$.ajax({
        type: "POST",
        url: "http://somedomain.freshdesk.com/widgets/feedback_widget",
        // where you wanna post
        data: formData,
        processData: false,
        contentType: false,
        error: function(jqXHR, textStatus, errorMessage) {
             console.log(errorMessage); // Optional
        },
        statusCode: {
             404: function() {
                 alert("page not found");
             },
             200: function() {
                window.location="/thanks";
             }
        },
        success: function(data, textStatus, jqXHR) { 
             //your code
        },
        error : function () {
        }


});

答案 1 :(得分:0)

状态代码位于XHR对象的status属性中:

    ...
    error: function(jqXHR, textStatus, errorMessage) {
         console.log(jqXHR.status);
    },
    success: function(data, textStatus, jqXHR) {
        if(jqXHR.status==200){
            window.location="/thanks";
        }
    } 
    ...