2010-04-11 2 views
8

Ich habe Code, der eine einfache Anfrage an Twitter (Suche) mit jQuery Ajax-Methode zu erhalten. Der Code funktioniert gut in Safari, schlägt aber unter Firefox (3.6.3) fehl. Im Firefox-Fall wird meine jQuery.ajax Parameter "Erfolg" -Methode aufgerufen, aber die gelieferten Daten sind null. (. In Safari, erhalte ich eine Menge von JSON-Daten)jQuery.ajax Aufruf an Twitter gelingt aber gibt null für Firefox

Mein Ajax-Aufruf ist:

$.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 zeigt Response-Header:

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 

Die HTTP-Status ist OK (200), der Content-Type ist richtig application/json, und die Content-Length von 2126 (gzip'd) impliziert, dass Daten zurückkamen. Die zeigt jedoch an, dass die Antwort leer ist, und ein Test der gelieferten Daten zeigt an, dass sie 'null' ist.

Ich kenne eine ähnlichen Position auf Stack-Überlauf, jQuery $.get() function succeeds with 200 but returns no content in Firefox und daraus würde dieses Problem annimmt, ist möglicherweise im Zusammenhang mit Cross-Domain-Sicherheit, aber ... Ich weiß, es gibt viele JavaScript-Widgets und so weiter, dass Ajax erhalten Daten von Twitter. Gibt es etwas, das ich aktivieren muss, um dies zu ermöglichen?

+6

Ah, ist sicherlich ein Problem mit domänenübergreifenden Sicherheitsrichtlinien. Habe ein "& callback =?" an die GET-Anfrage, und alles funktioniert jetzt. – Zhami

+0

Können Sie Ihren ursprünglichen Beitrag mit der hinzugefügten Rückrufoption aktualisieren? - Vielen Dank! –

+2

@ Zhami: Wenn Sie es beantwortet haben, sollten Sie Ihre Lösung als Antwort hier posten. –

Antwort

2

Sie versuchen, einen domainübergreifenden Ajax-Aufruf durchzuführen. Dazu müssen Sie JSONP verwenden.

JQuery versteht JSONP und es behandelt alle zugrunde liegenden Tricks für Sie.

Sie müssen nur den Parameter & callback =? zu Ihrer URL und JQuery wird die Anfrage als ein Cross-Domain-Anruf machen. Wichtiger ist, dass es die JSONP-Antwort vom Server versteht und verarbeitet, also für Sie transparent ist.