Dan*_* D. 27 jquery user-agent jsonp http-headers
我正在使用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);
}
});
Run Code Online (Sandbox Code Playgroud)
我尝试过使用beforeSend方法,但看起来这个事件没有被触发.任何人都可以想出任何解决这个问题的方法吗?
谢谢.
And*_*y E 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())
Run Code Online (Sandbox Code Playgroud) XDomainRequest - 对于IE 8,IE 9
// Is XDomainRequest supported?
if ("XDomainRequest" in window)
Run Code Online (Sandbox Code Playgroud) 如果它们存在并且相应地使用它们,那么测试这些实现将是一个好主意,对于不支持的或旧的浏览器,回退到标准JSONP.
也可能(但不太可能,因为它很高调)Web服务未设置为允许跨源请求,因此如果请求失败,您可能仍然必须回退到JSONP.另请参见跨源资源共享.