使用JQuery跨域访问数据服务/ API

时间:2009-09-16 11:01:31

标签: jquery ajax

我正在尝试使用jquery .ajax(或.get,.post等)通过http访问第三方API。 api位于我的机器上

http://localhost:7777/server/<method>?<args>

服务器有一堆查询其OLAP服务器的方法,例如登录(返回用于其他方法的登录密钥),数据库(列出服务器上的数据库),多维数据集,维度等等。

例如

登录服务器

http://localhost:7777/server/login?user=admin&password=21232f297a57a5a743894a0e4a801fc3

如果我将其输入浏览器地址栏,我会收到正确的数据。

但是,我想制作一个小网页来测试调用,并认为我应该能够使用jQuery创建获取并返回到浏览器的数据。

继承我的代码

<html>
<head>
    <title>Palo Test Report</title>
    <script type="text/javascript" src="scripts/jquery-1.3.2.min.js"></script>
        <script type="text/javascript" language="javascript">            
        function calculate(){
            $.ajax({
                type:"GET",
                url:"http://localhost:7777/server/login?user=admin&password=21232f297a57a5a743894a0e4a801fc3&callback=?",
                success: function(data,textStatus){
                    alert(data + ":" + textStatus);
                }
                ,
                error: function(request,errorStatus,errorThrown){
                    alert("Error:" + errorThrown);
                }
            });
        }
    </script>
</head>
  <body>
      <div>Sample Palo Report #1</div>
      <input type="button" value="Calculate" onclick="calculate();" />
  </body>
</html>

该方法进入服务器并点击成功回调。但是,数据参数是一个空字符串。

我读了一些关于通过ajax进行跨域访问问题的帖子,看起来这可能是因为服务运行不同的端口可能会发生什么,尽管我对“成功”标志感到有些惊讶。另一件奇怪的事情是,如果我在IIS中创建一个新的虚拟目录并将文件放在那里,我会使用一个空的errorThrown参数来查看错误回调。

service / api返回简单字符串而不是json,因此getJSON不起作用。

我正在尝试使用jQuery吗?

我确实有一个解决方法,但它非常难看!

提前致谢

2 个答案:

答案 0 :(得分:2)

我的猜测是您的测试网页位于 http://localhost:7777 ,因为否则无效。

$。ajax 按预期工作,但由于您未提供选项 dataType:“jsonp”

  • 它假设检索到的数据是 XML HTML (根据文档的“智能”猜测,但我们都知道智能在算法方面的真正含义)
  • 它不打扰处理网址的 callback =?部分(如果你用类似firebug的东西跟踪网络流量,你可以轻松控制回调=?部分网址保持原样)

现在,服务器响应肯定不是 XML ,也不是 HTML ,但请求成功。因此,您最终会使用空数据参数调用成功回调(尽管我希望在其正文中包含响应文本的基本 HTML 文档)。

只需在您的选项中添加 dataType:“jsonp”,它就可以正常运行。

答案 1 :(得分:1)

Ajax调用仅限于同一个域。您需要jsonP来查询第三方域。查看ajax()方法 jsonP 选项。

<强>更新

CORS(跨源资源共享)也作为w3c的工作草案出现。