【问题标题】:jQuery AJAX Cross Domain with BASIC Authentication具有基本身份验证的 jQuery AJAX 跨域
【发布时间】:2014-11-16 00:03:49
【问题描述】:

我正在尝试通过将数据拉入网页来使用 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 返回它。任何帮助表示赞赏。谢谢!

【问题讨论】:

  • 确保服务器/页面(或其他)允许通过 Ajax 进行请求。
  • 当你通过 ajax 调用时你是如何提供用户名和密码的
  • Bishnu- 还有其他方法可以远程获取数据吗?
  • muthu- 在上面的脚本中。这是 var 'tok'。
  • 我最终只是编写了一个 cURL 脚本来执行此操作。服务器必须不喜欢被 AJAX ping。如果有人想看,请告诉我,我会编辑问题。

标签: javascript jquery ajax cross-domain


【解决方案1】:

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

通常的场景是这样的:

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

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

【讨论】:

    【解决方案2】:

    您无法从您的域以外的其他域获取 json。这是一个名为 same origin policy 的安全问题,使用 JSONP 而不是 JSON。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 即使使用正确的密码,它也会给我同样的身份验证错误。
      • 我收到这样的错误 GET aaronh.beanstalkapp.com/api/… 401 (Unauthorized)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-01
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多