为JSONP请求修改HTTP头
我正在使用jQuery来build立一个TwittersearchAPI的请求。 我正在使用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方法,但似乎这个事件不会触发。 任何人都可以想出解决这个问题的办法吗?
谢谢。
带填充的JSON通过向页面添加脚本元素来工作,其中src属性指向Web服务的URL。 然后,Web服务返回一个脚本,其中包含在脚本完成parsing时执行的callback函数中包装的数据。 它不是那么多的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)
如果这些实现存在并相应地使用它们,那么testing这些实现将是一个好主意,对于不支持的或旧版本的浏览器,可以回到标准JSONP。
这也可能(但不太可能,因为它是高调)Web服务没有设置为允许跨源请求,所以如果请求失败,您可能仍然需要退回到JSONP。 另请参阅跨源资源共享 。
尝试这个 :
// 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); } }); });
我在那find了: https : //groups.google.com/d/msg/google-api-javascript-client/GuFxPzqQ9-0/hZpo041UaH4J