jQuery AJAX请求302重定向 - 有哪些回调可用?

时间:2011-06-06 15:19:35

标签: jquery redirect jquery-callback

我正在使用一个使用jQuery 1.2.6的旧系统。我通过jQuery.ajax函数发送AJAX请求。它正在点击的URL是发送302 HTTP重定向响应,最终得到200 HTTP OK响应。我已经注册了successcomplete回调,但它们都没有被调用。

我的问题是:重定向发生后是否有/可以调用的回调?

jQuery.ajax({
    type: "GET",
    url: url,
    data: null,
    dataType: "json",
    async: false,
    success: function(data, textStatus) {
        alert("SUCCESS CALLED: " + textStatus);
    },      
    complete: function(xhr, status) {
        alert("COMPLETE CALLED");
    }
});

注意:响应是HTML,而不是JSON,但是将dataType更改为html会改变请求。它会发送OPTIONS请求而不是GET请求,也不再重定向。我需要重定向这些重定向。

2 个答案:

答案 0 :(得分:2)

根据评论:

  

dataType更改为html会改变请求。它会发送OPTIONS请求而不是GET请求,也不再重定向。

发送跨域请求时会发生这种情况。即,url不指向与提供此脚本的域相同的域。这违反了Same Origin Policy。无权访问服务器代码也确认它在不同的域上运行。 jQuery发送的HTTP OPTIONS请求应该让服务器返回带有Allow标头的响应,其中包含允许在特定URL上使用的请求方法列表,以便jQuery可以相应地继续。这显然没有发生。

如果服务器完全无法控制,您需要在服务器上创建一个代理,该代理连接所需的URL并将其响应流回。然后改变jQuery url以指向代理URL。目前还不清楚你正在使用什么编程语言,但你的问题历史表明你熟悉Java,在这种情况下你可以使用一个简单的servlet与java.net.URLConnectionApache HttpComponents Client

答案 1 :(得分:0)

使用jquery ajax选项

dataType:'jsonp'

执行跨域请求的重定向。 (在FF / Chrome浏览器中测试过)

但是,只有当您没有处理响应或者跨域url支持jsonp方法时,此解决方案才有用。