4

我在尝试查询的外部服务器上有一个数据库。为此,我将在本地服务器 (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 在控制台中的 302 旁边给我一个 X,为什么没有重定向?
  • 我怎样才能解决这个问题?
  • 一旦我修复了它,我是否能够获取那个 XML 文件,或者我还需要做些什么吗?

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

4

3 回答 3

3

由于它是一个 ajax 请求,因此您不能从另一个域中提取数据:http ://en.wikipedia.org/wiki/Same_origin_policy

您在这里真正可以做的就是从您自己的服务器(同一个域)请求数据,并让它为您从外部数据库中提取数据。

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

于 2012-06-25T23:20:03.747 回答
1

你有一个语法错误readystate需要readyState。它的写法,永远不会是 4。

另一条建议是只检查readyState4 的 a 并在该语句中测试status302。这样您就可以排除是否是 302 导致了您的问题。

于 2012-06-22T21:04:29.300 回答
0

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

来自 FireBug 的快照

看到这个快照

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

于 2012-06-25T15:02:15.817 回答