0

我正在尝试通过 JQuery.ajax() 方法从 Asana API 中提取信息。但是没有返回想要的结果,或者显示错误。
这是我在 JavaScript 中的部分代码:

$(document).ready(function () {

    $('#buttonCallAjax').click(function () {
        jQuery.support.cors = true;
            $.ajax(
                {
                    type: "GET",
                    url: "https://app.asana.com/api/1.0/users/me",
                    data: "{}", 
                    contentType: "application/x-www-form-urlencoded; charset=utf-8",
                    dataType: "jsonp",
                    success: function (data) {


                        alert(data);

                    },
                    error: function (msg, url, line) {
                        alert('error trapped in error: function(msg, url, line)');
                        alert('msg = ' + msg + ', url = ' + url + ', line = ' + line);

                    }
                });
        });

    });

ajax() 方法我看了很多,但是还是弄明白了这个方法中的一些options参数,比如data,dataType(因为这是跨域请求,我用的是jsonp)。
有人可以帮助成功地从 Asana API 中提取信息吗?

4

2 回答 2

1

经过一番研究,现在 Asana 的 API 似乎不支持返回 JSONP。

此外,经过我自己的一些探索,它们看起来也不支持 CORS,因此跨域 XHR 看起来是不可能的。当然,我没有使用适当的身份验证进行测试,并且他们的服务可能配置为仅将 CORS 标头授予已授权的请求。

或者,您可以让服务器端脚本向 API 发出通用 Web 请求,并将结果代理回您的 UI。

于 2012-07-01T06:34:15.853 回答
1

尽管 Asana API 目前看起来不支持 JSONP,但如果将来他们支持并且您需要进行身份验证,您可以使用以下代码来完成。

$.ajax( {
  url : 'https://app.asana.com/api/1.0/users/me',
  dataType : 'jsonp',
  beforeSend : function(xhr) {
      xhr.setRequestHeader('Authorization', 'Basic ' + btoa(API_KEY + ":"));

  }
);

btoa函数编码为 base64,但并非所有浏览器都支持,因此如果您需要支持较旧的浏览器,您可能需要使用其他库。

更新

用户名也可以直接用 jQuery 设置,无需编码或设置标题。

 $.ajax( {
  url : 'https://app.asana.com/api/1.0/users/me',
  dataType : 'jsonp',
  username : API_KEY
 });

当使用 JS 访问 API 时,您的 API_KEY 将以明文形式出现在页面上。也许这些东西应该在服务器端完成。

于 2012-07-02T01:37:17.917 回答