我试图通过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中提取信息吗?
答案 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将以明文形式显示在页面上。也许这些东西应该在服务器端完成。