2010-04-11 37 views
8

我有代码,使用jQuery的Ajax方法,使Twitter(搜索)的简单的获取请求。该代码在Safari上运行良好,但在Firefox(3.6.3)上失败。在Firefox的情况下,我的jQuery.ajax参数'成功'方法被调用,但提供的数据为空。 (在Safari中,我收到了很多的JSON数据)jQuery.ajax调用Twitter的成功,但火狐返回null

我的Ajax调用是:

$.ajax({ 
    url: 'http://search.twitter.com/search.json?q='+searchTerm, 
    dataType: 'json', 
    async: true, 
    beforeSend: function(request) { 
     window.console.log('starting AJAX request to get Twitter data'); 
    }, 
    success: function(data, textStatus, request) { 
     window.console.log('AJAX request to get Twitter succeeded: status=' + textStatus); 
     callback(data); 
    }, 
    error: function(request, status, error) { 
     window.console.log('Ajax request to get user data --> Error: ' + status); 
     errback(request, status, error); 
    } 
}); 

Firebug的显示响应头:

Date Sun, 11 Apr 2010 22:30:26 GMT 
Server hi 
Status 200 OK 
X-Served-From b021 
X-Runtime 0.23841 
Content-Type application/json; charset=utf-8 
X-Served-By sjc1o024.prod.twitter.com 
X-Timeline-Cache-Hit Miss 
Cache-Control max-age=15, must-revalidate, max-age=300 
Expires Sun, 11 Apr 2010 22:35:26 GMT 
Vary Accept-Encoding 
X-Varnish 1827846877 
Age 0 
Via 1.1 varnish 
X-Cache-Svr sjc1o024.prod.twitter.com 
X-Cache MISS 
Content-Encoding gzip 
Content-Length 2126 
Connection close 

的HTTP状态正常(200),内容类型正确application/json,内容长度2126(gzip'd)意味着数据回来。然而,Firebug显示响应为空,并且对提供的数据的测试显示它为“空”。

我知道堆栈溢出类似的帖子,jQuery $.get() function succeeds with 200 but returns no content in Firefox,并从该会认为这个问题可能与跨域安全,但......我知道有很多的JavaScript小部件和诸如此类的东西阿贾克斯获得来自Twitter的数据。有什么我需要启用以允许这?

+6

啊,跨域安全政策肯定是个问题。已添加“&callback =?”到GET请求,现在所有的工作。 – Zhami 2010-04-12 13:24:43

+0

你可以更新你原来的帖子w /回调选项添加? - 谢谢! – 2011-05-24 18:25:27

+2

@Zhami:如果你回答了这个问题,你应该在这里发布你的答案。 – 2011-09-07 21:54:55

回答

2

您正在尝试进行跨域Ajax调用。要做到这一点,你需要使用JSONP。

JQuery了解JSONP,它将处理所有基本技巧。

您只需要添加参数& callback =?到您的URL和JQuery将请求作为跨域调用。更重要的是,它会理解和处理来自服务器的JSONP响应,所以对你来说它将是透明的。

相关问题