3

我试图通过将数据拉入网页来使用 Beanstalk (beanstalkapp.com) API,这样人们就可以在不访问我的 SVN 的情况下查看它。

我正在尝试通过 jQuery 使用 AJAX 请求来访问它。代码如下,但每次都报错,无法返回数据。

<script type="text/javascript">
$(document).ready(function() {
    var tok = 'username' + ':' + 'password123';
        hash = btoa(tok);
        authInfo = "Basic " + hash;
    $.ajax({
        url: "http://username.beanstalkapp.com/api/changesets.json",
        beforeSend: function (xhr) { xhr.setRequestHeader ("Authorization", authInfo); },
        type: "GET",
        async: false,
        crossDomain: true,
        dataType: "json",
        success:  function(html){
            console.log(html);
        },
        error: function(html){
            console.log('error');
        }
    });
});
</script>

如果我直接通过浏览器(http://username.beanstalkapp.com/api/changesets.json)访问 URL,它就可以正常工作并返回 json。但是,我无法让 AJAX 退回它。任何帮助表示赞赏。谢谢!

4

3 回答 3

4

您将需要为跨域 ajax 请求制作代理。

通常的场景如下所示:

  1. 客户端向服务器发送ajax请求
  2. 您的服务器将请求转发到外部/远程服务器
  3. 等待远程服务器的响应
  4. 解析和处理来自远程服务器的响应
  5. 将响应发送回客户端

如果您使用的是 php,您可以使用 curl 发送请求,这很容易实现。我最近写了一篇关于这个主题的文章http://www.svlada.com/proxy-ajax-requests-curl-and-symfony-2/

于 2012-08-14T05:49:28.600 回答
1

您无法从其他域获取 json。这是一个称为同源策略的安全问题,使用JSONP而不是 JSON来克服它。

于 2012-08-14T05:50:15.033 回答
0

检查这个jsfiddle。用户名和密码不正确。输入正确的用户名和密码并再次检查。

于 2012-08-14T05:57:15.510 回答