使用JQuery ajax()方法检索RESTful数据

时间:2012-07-01 06:21:17

标签: jquery asana

我试图通过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()方法的内容,但是仍然在这个方法中找到了一些选项参数,比如data,dataType(因为这是跨域请求,我使用了jsonp)。
有人可以帮助成功从Asana API中提取信息吗?

2 个答案:

答案 0 :(得分:1)

经过一番研究,看起来Asana的API现在不支持返回JSONP。

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

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

答案 1 :(得分: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但其not supported编码,因此如果您需要支持旧浏览器,则可能需要使用其他库。

<强>更新

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

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

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