由于您无法在 JSONP 调用上应用自定义标头,如何使用 jQuery 发出跨域请求并应用自定义标头?
我基本上尝试使用 jQuery 访问 google 文档,并且需要传递身份验证令牌:
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) {
}
});
注:这样做的目的是完全地绕过应用层。使用 ruby 连接 Google Data API 很简单,但在服务器端解析 feed 时始终会占用大量资源。
您可以使用 Google 的 JavaScript 客户端库来查询 Docs API。尽管它没有专门针对文档提供帮助程序,但它仍然可以与大多数 API 一起使用,包括文档。看到这个博客文章由 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);
}
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)