是否有可能使跨领域要求在Javascript和设定标题?
-
28-09-2019 - |
题
因为你可以不适用定义的头上他的电话, ,如何使跨领域的要求和适用定义的标题采用jQuery?
我基本上是试图访问docs字,并需要通过一个身份验证标记:
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) {
}
});
注:我们的目标是到 完全 绕过应用层。它使用简单的红宝石连接到谷歌数据API,但它需要很多资源分析饲料的所有服务器的时间。
解决方案
你可以使用谷歌的JavaScript客户的图书馆来查询的文件。虽然它不是有帮手对文件具体地说,它仍然可以使用与大多数Api,包括文档。看看这个 博客 通过谷歌雇员,显示了一个工作实例。
如果你最终在无限循环的授权,看到这个 相关的问题 从Google的群体。基本上,没有得到设定的速度不够快,因此当JavaScript client library检查,它发现什么和重定向到保护身份验证授权页。一个解决办法是添加一个小小的延迟之前检查,或者使用登录按钮启动的授权,而不是做到这一页上的负荷。
你还需要增加任何图像到你的网页,位于同一个领域。它可以隐藏的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);
}
};
其他提示
考虑在服务器端编写一些代码,该代码播放代理,然后命令它。
- 如果您使用的是PHP,请使用
curl
. - 如果您使用的是Java,请使用
URLConnection
或更方便的 apache httpclient. - 如果您使用C#/。网络,请使用
WebClient
. - 如果您正在使用Ruby,请使用
Net::HTTP
.
只要外部域允许,您就可以通过发送适当的 Access-Control-Allow-Origin
标题。然后只使用 XMLHttpRequest
支持标准跨域XHR API的浏览器中的API和 XDomainRequest
在IE中。
不隶属于 StackOverflow