jquery – 修改JSONP请求的HTTP头

我正在使用jQuery来建立对Twitter Search API的请求。我正在使用jsonp,因为跨域请求是必需的。但是,Twitter API指定您应该为这些请求设置唯一的用户代理,如果没有,则限制您的请求。问题是,我没有办法通过jquery设置这个头。

这是我使用的代码

$.ajax({
    url: 'http://search.twitter.com/search.json',dataType: 'jsonp',type: 'get',data: { q: 'twitter' },success: function(data) {
        alert(data.results);
    }
});

我已经尝试使用beforeSend方法,但似乎这个事件没有触发。任何人都有办法解决这个问题吗?

谢谢。

解决方法

通过向页面添加脚本元素,JSON与Padding可以起作用,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

相关文章

页面搜索关键词突出 // 页面搜索关键词突出 $(function () {...
jQuery实时显示日期、时间 html: <span id=&quot...
jQuery 添加水印 <script src="../../../.....
中文:Sys.WebForms.PageRequestManagerParserErrorExceptio...
1. 用Response.Write方法 代码如下: Response.Write(&q...
Jquery实现按钮点击遮罩加载,处理完后恢复 思路: 1.点击按...