jQuery AJAX请求302重定向-有哪些回调可用?
我使用的是一个使用jQuery 1.2.6的旧系统。我正在通过jQuery AJAX请求302重定向-有哪些回调可用?,jquery,redirect,jquery-callback,Jquery,Redirect,Jquery Callback,我使用的是一个使用jQuery 1.2.6的旧系统。我正在通过jQuery.AJAX函数发送一个AJAX请求。它命中的URL正在发送302 HTTP重定向响应,并最终以200 HTTP OK响应结束。我已经注册了成功和完成回调,但是它们都没有被调用 我的问题是:在重定向发生后,是否有任何回调可以/将被调用 jQuery.ajax({ type: "GET", url: url, data: null, dataType: "json", async: fa
jQuery.AJAX
函数发送一个AJAX请求。它命中的URL正在发送302 HTTP重定向响应,并最终以200 HTTP OK响应结束。我已经注册了成功
和完成
回调,但是它们都没有被调用
我的问题是:在重定向发生后,是否有任何回调可以/将被调用
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,但是将数据类型更改为HTML
会改变请求。它发送一个OPTIONS
请求,而不是GET
请求,并且不再重定向。我需要执行这些重定向。根据评论:
将数据类型更改为html
会更改请求。它发送一个OPTIONS
请求,而不是GET
请求,并且不再重定向
当您发送跨域请求时,将发生这种情况。也就是说,url
不指向与此脚本服务的域相同的域。这就是违反法律。无法访问服务器代码也会确认它运行在不同的域上。jQuery发送的HTTP请求应该让服务器返回一个响应,该响应带有一个标题,其中包含允许在特定URL上使用的请求方法列表,这样jQuery就可以相应地继续。这显然没有发生
如果服务器真的完全不受您的控制,您需要在服务器上创建一个代理,该代理连接所需的URL并将其响应流返回。然后将jQueryurl
改为指向代理url。不清楚您使用的是哪种编程语言,但您的问题历史表明您熟悉Java,在这种情况下,您可以使用一个简单的servlet来实现这一点。使用jquery ajax选项
数据类型:“jsonp”
对跨域请求执行重定向。
(在FF/Chrome浏览器中进行了测试)
但是,只有当您不处理响应或者跨域url支持jsonp方法时,此解决方案才有用 您有权访问服务器代码吗?浏览器可以透明地处理302个响应,但是当收到200状态码时,应该最终调用success函数。嗨,Ben,谢谢你的帮助。我没有访问服务器代码的权限。关于success
回调,我有一个alert
调用,作为一个简单的测试。在通过Firebug发出XHR请求后,一旦点击200,就不会显示警报对话框。您可以发布一些代码吗?从服务器发送的响应数据是否与ajax调用中指定的数据类型相同?上面添加了代码。响应是HTML,而不是JSON。将数据类型更改为html
会更改请求。它发送一个OPTIONS
请求,而不是GET
请求,并且不再重定向。感谢您提供的信息。这让我们回到原来的问题。鉴于上述代码,使用json
作为dataType
和GET
请求,重定向后是否可以/将调用任何回调?要确认,URL是否指向其他域?如果是,那么您需要在自己的域上使用代理。如果没有,那么我就没有一个可行的解释来解释你所看到的问题。它一定是一个跨域请求。对于自己域上的请求,jQuery/XHR将以透明的方式处理。感谢您的帮助,BalusC。是的,它确实指向另一个域。