AJAX没有处理302重定向

时间:2012-06-22 20:37:55

标签: javascript ajax http redirect oauth

我正在尝试查询外部服务器上的数据库。为此,我将在我的本地服务器(Tomcat)上创建一个AJAX调用(只是XMLHttpRequest对象 - 我没有使用任何JavaScript库)到附加查询的页面。将完全相同的URL粘贴到Firefox中会导致它尝试下载XML文档。我的目标是使用AJAX来获取XML文档。

我遇到的问题是,当我使用AJAX进行调用时,Firebug显示GET响应返回302“暂时移动”,旁边有一个红色的X. GET响应的标头有一个带有OAuth授权的Location参数,当我复制并粘贴location参数时,它会将我带到正确的页面(告诉我下载XML对象)。

编辑:我尝试使用jQuery的$.get("URL", function(data){alert(data)});并且发生了同样的事情 - 没有警报,但是在Firebug中有红色GET请求和302.

根据这些信息,我认为我调用的数据库首先尝试将我重定向到某个OAuth,然后返回一个用于访问数据库的授权URL。这是我应该用来调用数据库,获取XML对象,然后做我的事情。 AJAX似乎无法处理重定向而是崩溃。

我不确定这是否正确,因为我尝试使用以下代码:

  else if (xmlhttp.readyState == 4 && xmlhttp.status == 302){
  alert("Hello 302!");
}
else {
  document.getElementById("test").innerHTML = "On state: " + xmlhttp.readyState + "<br />HTTP Status: " + xmlhttp.status;
}

并没有给我一个警告 - 相反它显示它处于状态4和状态0.我不明白为什么它会返回状态0.(编辑:修复了答案1中提到的拼写错误改变)

所以我的问题是:

  • 究竟是什么发生在这里?
  • 什么是0状态,为什么Firebug在控制台中给我一个X旁边的X,为什么没有重定向呢?
  • 我该如何解决这个问题?
  • 一旦我修复它,我能抓住那个XML文件,还是还有其他我需要做的事情?

EDIT WITH UPDATE:这是一个跨站点脚本问题。我继续使用外部服务器并运行完全相同的脚本,并能够检索和解析包含查询结果的XML文档。唯一的障碍是弄清楚如何从外部服务器执行此操作。我可以访问外部服务器的配置,并将研究如何操作它以允许通过来自其他站点的数据库查询进行访问。

3 个答案:

答案 0 :(得分:3)

由于这是ajax请求,因此您无法从其他域提取数据:http://en.wikipedia.org/wiki/Same_origin_policy

这里你所能做的就是来自你自己的服务器(同一个域)的请求数据,并让它从你的外部数据库中提取数据。

编辑:此回复超过3年,现在使用现代浏览器(不是IE&lt; 10),您可以使用跨源资源共享 - https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

答案 1 :(得分:1)

您的语法错误readystate必须为readyState。它的编写方式永远不会是4。

另一条建议是检查readyState的4并在该语句中测试302的status。这样你就可以解决它是否是302导致您的问题。

答案 2 :(得分:0)

尝试在服务器端执行重定向

来自FireBug的快照

See this snapShot

在此快照中,发送到服务器端的Ajax请求(其中存在重定向)