2010-04-11 6 views
8

Mam kod, który sprawia, że ​​proste żądanie pobrania na Twitter (wyszukiwanie) przy użyciu metody Ajax jQuery. Kod działa poprawnie w Safari, ale kończy się niepowodzeniem w Firefoksie (3.6.3). W przypadku Firefoxa wywoływana jest moja metoda "success" parametrów jQuery.ajax, ale dostarczone dane mają wartość null. (. W Safari, otrzymuję dużo danych JSON)Wywołanie jQuery.ajax na Twitterze powiedzie się, ale zwróci wartość null dla przeglądarki Firefox

Moja Ajax wywołanie jest:

$.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 pokazuje nagłówki odpowiedzi:

stan
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 jest OK (200) Typ zawartości jest odpowiednio application/json, a długość zawartości 2126 (gzip'd) oznacza, że ​​dane wróciły. Jednak Firebug pokazuje, że odpowiedź ma być pusta, a test dostarczonych danych pokazuje, że ma wartość "null".

Jestem świadomy podobnym stanowisku na przepełnienie stosu, jQuery $.get() function succeeds with 200 but returns no content in Firefox iz która przejęłaby ten problem jest prawdopodobnie związane z bezpieczeństwem w wielu domenach, ale ... Wiem, że istnieje wiele widgetów, JavaScript i Ajax, że cokolwiek się dane z Twittera. Czy jest coś, co muszę włączyć, aby to umożliwić?

+6

Ach, na pewno jest problem z polityką bezpieczeństwa międzydomenowego. Dodano "& callback =?" do żądania GET, a teraz wszystko działa. – Zhami

+0

Czy możesz zaktualizować pierwotny wpis z dodaną opcją oddzwaniania? - Dzięki! –

+2

@Zhami: Jeśli odpowiedziałeś, powinieneś opublikować swoje rozwiązanie jako odpowiedź tutaj. –

Odpowiedz

2

Próbujesz wykonać wywołanie Ajax między domenami. Aby tak się stało, musisz użyć JSONP.

JQuery rozumie JSONP i poradzi sobie z wszystkimi podstawowymi sztuczkami.

Musisz tylko dodać parametr callback =? & do adresu URL, a JQuery spowoduje, że żądanie będzie wywoływać w domenie Cross. Ważniejsze jest to, że zrozumie i obsłuży odpowiedź JSONP z serwera, więc dla ciebie będzie ona przejrzysta.