【问题标题】:jQuery ajax call to domain that redirects to another domain (isn't followed)jQuery ajax 调用重定向到另一个域的域(不遵循)
【发布时间】:2013-09-15 07:30:06
【问题描述】:

这是一个跨域问题,但问题是浏览器 (Chrome) 似乎没有遵循重定向。相反,jQuery ajax 调用没有返回任何内容,并且出现错误。

我正在尝试使用 jQuery.ajax,但我使用的 URL 重定向到另一个域。发生这种情况时,我得到一个错误。是否有什么特别的事情需要做才能让浏览器跟随重定向?

我已经将access-control-allow-origin: * 添加到被重定向到的第二个域的标题中。

【问题讨论】:

  • 你能添加你的代码和你看到的错误吗?
  • 你不能在你的 ajax 中从其他域获取数据。

标签: ajax jquery cross-domain


【解决方案1】:

HTTP 重定向页面被视为任何其他 HTTP 页面,因为它也需要访问控制标头。如果您的重定向页面没有它们,浏览器将永远不会检查被重定向到的页面是否具有适当的权限。

除了重定向页面上的Location标头,还要添加Access-Control-Allow-Origin标头及其相关成分(即Access-Control-Allow-Methods等)

【讨论】:

  • 你的回答中有很多理论......几行代码来说明你所说的不会受到伤害
【解决方案2】:

获得跨域ajax调用的唯一方法是使用jsonp。

在 jQuery 中,将您的 .ajax() 数据类型设置为“jsonp”。见这里:http://api.jquery.com/jQuery.ajax/

如果被重定向到的服务器无法进行 jsonp 响应,它仍然可能无法正常工作。 json响应和jsonp响应的区别在于json响应是纯json字符串,而jsonp响应是调用函数传入json字符串的代码。

一个不太破旧的教程:http://remysharp.com/2007/10/08/what-is-jsonp/

很好的讨论:Can anyone explain what JSONP is, in layman terms?

【讨论】:

  • 使用跨域资源共享 (CORS) 可以实现跨域 ajax 调用,并且作者使用了这项技术(正如他提到的“access-control-allow-origin: *”标头。)
  • @vadimk,也许你可以提供一个涉及这种方法的答案。但从帖子看来,问题出在客户端。使用 CORS 的 access-control-allow-origin 方法位于服务器端。即使服务器允许,客户端也不允许。因此 JSONP。
  • 乔纳森,看看我的回答。该解决方案涉及确保重定向页面具有正确的响应标头。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-02
  • 2013-05-18
  • 2020-05-04
  • 2015-08-20
  • 2016-07-22
相关资源
最近更新 更多