我正在使用jquery来构建对Twitter Search API的请求。我正在使用jsonp,这是跨域请求所需要的。但是,Twitter API指定您应为这些请求设置唯一的User-Agent,如果不这样做,则会限制您的请求。问题是,我认为无法通过jquery设置此标头。
这是我正在使用的代码:
$.ajax({
url: 'http://search.twitter.com/search.json',
dataType: 'jsonp',
type: 'get',
data: { q: 'twitter' },
success: function(data) {
alert(data.results);
}
});
我已尝试使用beforeSend方法,但似乎此事件未触发。任何人都可以想出解决这个问题的方法吗?
感谢。
答案 0 :(得分:55)
带填充的JSON通过向页面添加脚本元素来工作, src 属性指向Web服务的URL。然后,Web服务返回一个脚本,该脚本包含在回调函数中包含的数据,该函数在脚本完成解析时执行。它不是JSON(它甚至不一定是有效的JSON,一开始),因为它是纯JavaScript。
不幸的是,没有办法修改为添加到页面的脚本元素发送的标题。您唯一能做的就是检查检索数据的跨源兼容方法,例如:
XMLHttpRequest Level 2 - Chrome,Safari 4 +,Firefox 3.5 +,Opera
// Is XMLHttpRequest Level 2 supported?
if ("withCredentials" in new XMLHttpRequest())
XDomainRequest - 适用于IE 8,IE 9
// Is XDomainRequest supported?
if ("XDomainRequest" in window)
如果这些实现存在并且相应地使用它们,那么测试这些实现将是一个好主意,对于不支持的或旧版本的浏览器,回退到标准JSONP。
也可能(但不太可能,因为它很高调)Web服务未设置为允许跨源请求,因此如果请求失败,您可能仍然必须回退到JSONP。另请参阅Cross-Origin Resource Sharing。
答案 1 :(得分:0)
试试这个:
// OAuth configurations
var config = {
'client_id': 'xxxxxx.apps.googleusercontent.com',
'scope': 'https://www.google.com/m8/feeds/contacts/default/full'
};
gapi.auth.authorize(config, function(data) {
// login complete - now get token
var token = gapi.auth.getToken();
token.alt = 'json';
// retrieve contacts
jQuery.ajax({
url: 'https://www.google.com/m8/feeds/contacts/default/full/?max-results=999999',
dataType: 'jsonp',
data: token,
success: function(data) { successGmail(data); }
});
});
我在那里找到了它:https://groups.google.com/d/msg/google-api-javascript-client/GuFxPzqQ9-0/hZpo041UaH4J