我正在使用一个使用jQuery 1.2.6的旧系统。我通过jQuery.ajax
函数发送AJAX请求。它正在点击的URL是发送302 HTTP重定向响应,最终得到200 HTTP OK响应。我已经注册了success
和complete
回调,但它们都没有被调用。
我的问题是:重定向发生后是否有/可以调用的回调?
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
请求,也不再重定向。我需要重定向这些重定向。
答案 0 :(得分:2)
根据评论:
将
dataType
更改为html
会改变请求。它会发送OPTIONS
请求而不是GET
请求,也不再重定向。
发送跨域请求时会发生这种情况。即,url
不指向与提供此脚本的域相同的域。这违反了Same Origin Policy。无权访问服务器代码也确认它在不同的域上运行。 jQuery发送的HTTP OPTIONS
请求应该让服务器返回带有Allow
标头的响应,其中包含允许在特定URL上使用的请求方法列表,以便jQuery可以相应地继续。这显然没有发生。
如果服务器完全无法控制,您需要在服务器上创建一个代理,该代理连接所需的URL并将其响应流回。然后改变jQuery url
以指向代理URL。目前还不清楚你正在使用什么编程语言,但你的问题历史表明你熟悉Java,在这种情况下你可以使用一个简单的servlet与java.net.URLConnection
或Apache HttpComponents Client。
答案 1 :(得分:0)
使用jquery ajax选项
dataType:'jsonp'
执行跨域请求的重定向。 (在FF / Chrome浏览器中测试过)
但是,只有当您没有处理响应或者跨域url支持jsonp方法时,此解决方案才有用。