我在尝试查询的外部服务器上有一个数据库。为此,我将在本地服务器 (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 文档。唯一的障碍是弄清楚如何从外部服务器执行此操作。我可以访问外部服务器的配置,并将研究如何操作它以允许通过来自其他站点的数据库查询进行访问。