【问题标题】:jQuery AJAX Request 302 Redirect - What callbacks are available?jQuery AJAX 请求 302 重定向 - 哪些回调可用?
【发布时间】:2011-09-09 09:35:25
【问题描述】:

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

【问题讨论】:

  • 您有权访问服务器代码吗?浏览器透明地处理 302 响应,但是当收到 200 状态码时,您的成功函数最终应该被调用。
  • 嗨,本,感谢您的帮助。我无权访问服务器代码。关于success 回调,我有一个alert 调用作为一个简单的测试。通过 Firebug 发出 XHR 请求后,一旦命中 200,就不会显示任何警报对话框。
  • 你能发布一些代码吗?从服务器发送的响应数据是否与您的 ajax 调用中指定的数据类型相同?
  • 添加了上面的代码。响应是 HTML,而不是 JSON。将 dataType 更改为 html 会更改请求。它发送OPTIONS 请求而不是GET 请求,并且它也不再重定向。

标签: jquery redirect jquery-callback


【解决方案1】:

使用 jquery ajax 选项

数据类型:'jsonp'

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

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

【讨论】:

    【解决方案2】:

    根据 cmets:

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

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

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

    【讨论】:

    • 感谢您的信息。这使我们回到最初的问题。鉴于上面的代码,使用json 作为dataTypeGET 请求,是否有任何回调可以/将在重定向后调用?
    • 确认一下,URL 是否指向不同的域?如果是,那么您需要在自己的域上使用代理。如果没有,那么我对您看到的问题没有可行的解释。它一定是一个跨域请求。对于自己域上的请求,jQuery/XHR 将透明地处理它。
    • 感谢 BalusC 的帮助。是的,它确实指向不同的域。
    猜你喜欢
    • 2011-06-05
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多