4

我正在使用使用 jQuery 1.2.6 的旧系统。我正在通过该jQuery.ajax函数发送 AJAX 请求。它所命中的 URL 正在发送 302 HTTP Redirect 响应,最终以 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,但是将 更改dataTypehtml更改请求。它发送OPTIONS请求而不是GET请求,并且也不再重定向。我需要这些重定向发生。

4

2 回答 2

2

根据评论:

更改dataTypetohtml会更改请求。它发送OPTIONS请求而不是GET请求,并且也不再重定向。

这将在您发送跨域请求时发生。即,url不指向与提供此脚本的域相同的域。这就是违反同源政策。无法访问服务器代码也确认它在不同的域上运行。jQuery 发送的 HTTPOPTIONS请求应该让服务器返回一个带有Allow标题的响应,其中包含允许在特定 URL 上使用的请求方法列表,以便 jQuery 可以相应地继续。这显然没有发生。

如果服务器真的完全不受您的控制,您需要在您的服务器上创建一个代理来连接所需的 URL 并将其响应流回。然后将 jQuery 更改url为指向代理 URL。目前尚不清楚您使用的是哪种编程语言,但您的问题历史表明您熟悉 Java,在这种情况下,您可以使用简单的 servletjava.net.URLConnectionApache HttpComponents Client

于 2011-06-06T19:17:08.547 回答
0

使用 jquery ajax 选项

数据类型:'jsonp'

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

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

于 2012-09-06T14:04:50.927 回答