带有BASIC身份validation的jQuery AJAX跨域

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

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

 $(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'); } }); });  

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

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

通常情况如下:

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

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

你不能从其他领域得到一个json而不是你的。 这是一个称为同源策略的安全问题,可以克服它使用JSONP而不是JSON。

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