jQuery.ajax вызов Twitter успешно, но для Firefox возвращает ноль - PullRequest
8 голосов
/ 12 апреля 2010

У меня есть код, который делает простой запрос на получение в Twitter (поиск) с помощью метода jjuery Ajax. Код отлично работает в Safari, но не работает в Firefox (3.6.3). В случае с Firefox мой метод jQuery.ajax параметров 'success' вызывается, но предоставленные данные имеют значение null. (В Safari я получаю много данных в формате JSON.)

Мой 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), Content-Type правильно application/json, а Content-Length 2126 (gzip'd) подразумевает, что данные возвращены. Тем не менее, Firebug показывает, что ответ пуст, а проверка предоставленных данных показывает, что он равен нулю.

Мне известно о подобном сообщении о переполнении стека, функция jQuery $ .get () завершается успешно с 200, но не возвращает содержимого в Firefox , и из этого можно было бы предположить, что эта проблема возможно, это связано с междоменной безопасностью, но ... я знаю, что есть много JavaScript-виджетов и так далее, что Ajax получает данные из Twitter. Есть ли что-то, что мне нужно включить, чтобы разрешить это?

1 Ответ

2 голосов
/ 31 мая 2012

Вы пытаетесь совершить междоменный вызов Ajax. Для этого вам нужно использовать JSONP.

JQuery понимает JSONP и будет обрабатывать все основные трюки для вас.

Вам нужно только добавить параметр & callback =? на ваш URL, и JQuery сделает запрос как кросс-доменный вызов. Более важно то, что он поймет и обработает ответ JSONP от сервера, поэтому для вас он будет прозрачным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...