jQuery.post()并通过ajax重定向

时间:2012-01-25 11:06:56

标签: javascript ajax dom jquery

我使用jQuery.post()向服务器发送数据,当服务器将数据发送回客户端时,调用post()回调。我知道服务器可能会使用重定向标头字段(“Location”)进行响应。

目前,不会发生重定向。可能是什么原因? 是否有可能在重定向发生之前运行脚本?

更新: 附上一个剪切的代码。我知道POST方法被服务器接受,服务器响应POST。不知怎的,总是调用error()(看起来它甚至在客户端\ browswer接受响应之前就已经发生了。)

出了什么问题?

$(document).ready(function() {  
    $("#loginForm").submit(function() {
        $.ajax({
            type : "POST",
            data : $("#loginForm :input").not("#loginBtn").serialize(),
            url : "http://localhost/auth",
            success : function(data, textStatus, jqXHR) {
                alert("success");
                alert(jqXHR.getResponseHeader("Location"));
            }, 
            error : function(jqXHR, textStatus, errorThrown) {
                alert("error");
            }
        });
    });
});

3 个答案:

答案 0 :(得分:1)

jquery.post()通过发出Ajax请求来工作。在Ajax调用中,PHP脚本异步工作(将其视为后台线程)。因此,PHP脚本无法重定向客户端的浏览器。要做的就是让PHP脚本负责重定向的URL,并使用javascript重定向。

在你的POST回调中:

function(data){  //data will be the URL to redirect to, sent back by the PHP script
window.location = data;
}

修改

来自jquery.ajax()

上的Jquery文档

statusCode(已添加1.5)地图

Default: {}

当响应具有相应代码时要调用的数字HTTP代码和函数的映射。例如,以下内容将在响应状态为404时发出警告:

$.ajax({
  statusCode: {
    404: function() {
      alert('page not found');
    }
  }
});

如果请求成功,则状态码函数采用与成功回调相同的参数;如果它导致错误,则它们采用与错误回调相同的参数。

答案 1 :(得分:-1)

请在重定向情况下得到简单的响应,无需重定向打印任何标记,如“重定向”,并使用

编写客户端重定向
if(responce == 'redirect')
    window.location = "Your url"

请勿在服务器上重定向。

它会起作用。

答案 2 :(得分:-2)

如果执行导致重定向的操作,JQuery不会检测到它。浏览器在幕后自动处理,以创建无缝体验。