我有一个存储在外部服务器上的数据库,我正在尝试进行查询。为此,我在我的本地服务器(Tomcat)上创建了一个AJAX调用(只是XMLHttpRequest对象 - 我没有使用任何JavaScript库)到带查询附加的页面。将完全相同的URL粘贴到Firefox中会导致它尝试下载一个XML文档。我的目标是使用AJAX获取那个XML文档。
我遇到的问题是,在使用AJAX发出调用时,Firebug显示GET响应返回302 "临时移动"和红色X。GET响应的头部具有带有OAuth授权的位置参数,当我复制并粘贴位置参数时,它将带我到正确的页面(告诉我下载XML对象)。
编辑: 我尝试使用jQuery的$.get("URL", function(data){alert(data)});,但出现相同的情况 - 没有弹出,但在Firebug中出现红色GET请求和302。
根据这些信息,我认为我正在调用的数据库首先尝试将我重定向到一些OAuth东西,然后返回一个授权URL,以便访问数据库。这就是我应该使用来调用数据库、获取XML对象并完成我的工作的内容。AJAX似乎无法处理重定向,而是崩溃了。
然而,我不确定这是否正确,因为我尝试使用以下代码:
而没有弹出警告,它显示处于状态4和状态0。我不明白为什么会返回状态0。(编辑:已更正答案1中提到的拼写错误,但没有改变任何内容)
所以我的问题是:
- 到底发生了什么? - 状态0是什么,为什么Firebug在控制台中给我一个302旁边的X,为什么没有重定向? - 我该如何解决这个问题? - 一旦我解决了这个问题,我是否能够获取那个XML文件,或者还需要做其他事情?
更新后的编辑:这是一个跨站脚本攻击问题。我去了外部服务器并运行了完全相同的脚本,成功检索和解析包含查询结果的XML文档。唯一的障碍是如何从外部服务器执行此操作。我可以访问外部服务器的配置,并将研究如何操纵它以允许其他站点通过数据库查询访问它。
我遇到的问题是,在使用AJAX发出调用时,Firebug显示GET响应返回302 "临时移动"和红色X。GET响应的头部具有带有OAuth授权的位置参数,当我复制并粘贴位置参数时,它将带我到正确的页面(告诉我下载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文档。唯一的障碍是如何从外部服务器执行此操作。我可以访问外部服务器的配置,并将研究如何操纵它以允许其他站点通过数据库查询访问它。