我正在使用一个使用 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
请求,并且也不再重定向。我需要进行这些重定向。
最佳答案
根据评论:
Changing the
dataType
tohtml
alters the request. It sends anOPTIONS
request instead of aGET
request, and it also no longer redirects.
当您发送跨域请求时,就会发生这种情况。即,url
不指向与提供此脚本的域相同的域。这即违反了Same Origin Policy 。无法访问服务器代码也确认它在不同的域上运行。 HTTP OPTIONS
jQuery 发送的请求应该让服务器返回一个带有 Allow
的响应。 header 包含允许在特定 URL 上使用的请求方法列表,以便 jQuery 可以相应地继续。这显然没有发生。
如果服务器确实完全超出您的控制范围,您需要在服务器上创建一个代理来连接所需的 URL 并将其响应流式传输回来。然后更改 jQuery url
以指向代理 URL。目前尚不清楚您使用的是什么编程语言,但您的问题历史记录表明您熟悉 Java,在这种情况下,您可以使用 java.net.URLConnection
的简单 servlet或Apache HttpComponents Client为此。
关于jQuery AJAX 请求 302 重定向 - 哪些回调可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6254219/