带有BASIC身份验证的jQuery AJAX跨域

时间:2012-08-14 05:38:17

标签: javascript jquery ajax cross-domain

我试图通过将数据拉入网页来使用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>

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

3 个答案:

答案 0 :(得分:4)

您需要为跨域ajax请求创建代理。

通常情况如下:

  1. 客户端向服务器发送ajax请求
  2. 您的服务器将请求转发到外部/远程服务器
  3. 等待来自远程服务器的响应
  4. 解析并处理来自远程服务器的响应
  5. 将回复发送回客户
  6. 如果你使用的是php,你可以用curl发送请求,而且很容易实现。我最近写了一篇关于这个主题的文章http://www.svlada.com/proxy-ajax-requests-curl-and-symfony-2/

答案 1 :(得分:0)

你不能从其他领域得到一个json而不是你的。这是一个名为same origin policy的安全问题,使用JSONP而不是JSON来克服它。

答案 2 :(得分:0)

检查jsfiddle。用户名和密码不正确。提供正确的用户名和密码,然后再次检查。