Lan*_*ard 5 javascript ajax jquery cross-domain custom-headers
由于您无法在JSONP调用上应用自定义标头,如何使用jQuery创建跨域请求并应用自定义标头?
我基本上试图使用jQuery访问谷歌文档,并需要传递身份验证令牌:
var token = "my-auth-token";
$.ajax({
url: "http://docs.google.com/feeds/documents/private/full?max-results=1&alt=json",
dataType: 'json',
beforeSend: function(xhr) {
xhr.setRequestHeader("Authorization", "GoogleLogin auth=" + token);
},
success: function(data, textStatus, XMLHttpRequest) {
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
}
});
Run Code Online (Sandbox Code Playgroud)
注意:这样做的目的是完全绕过应用程序层.使用ruby连接到Google Data API很简单,但是它会占用很多资源,一直在服务器端解析Feed.
您可以使用Google的JavaScript客户端库来查询Docs API.虽然它没有专门为Docs提供帮助程序,但它仍然可以与大多数API一起使用,包括Docs.请参阅Google员工的博文,其中显示了一个有效的示例.
如果您最终获得无限授权,请参阅Google网上论坛中的相关问题.基本上,cookie的设置速度不够快,因此当JavaScript客户端库检查时,它什么也找不到,并重定向到OAuth授权页面.解决方案是在检查完成之前添加一个小延迟,或使用启动授权的登录按钮而不是在页面加载时执行.
您还需要将任何图像添加到位于同一域中的页面.它可以用CSS隐藏,只要在DOM中.
使用上面博客文章中的示例,我能够仅使用JavaScript检索我的文档列表.这是我用来摆脱无限授权循环的修改初始化函数:
function initialize() {
var scope = 'http://docs.google.com/feeds/';
if (google.accounts.user.checkLogin(scope)) {
var service = new google.gdata.client.GoogleService('writely', 'DocList-App-v1.0');
service.getFeed(scope + 'documents/private/full/', handleFeed, handleError);
} else {
var loginButton = $("<button>Click here to login</button>");
loginButton.click(function() {
var token = google.accounts.user.login(scope); // can ignore returned token
});
$("body").append(loginButton);
}
};
?
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8240 次 |
最近记录: |