$ .get не возвращает никаких данных в Internet Explorer - PullRequest
1 голос
/ 11 февраля 2011

Я использую функцию $ .get в JQuery, чтобы получить канал Twitter и отобразить его на моем сайте.Я понятия не имею, почему он не получает никаких данных (т. Е. Код внутри функции (d) {...} не вызывается).Он отлично работает во всем остальном, что я пробовал.Я также использовал этот код раньше без проблем, единственное, о чем я могу подумать, это то, что он работает через https.

(Обратите внимание, что для примера я удалил идентификатор пользователя Twitter из URL фида)

JS:

    $.get('proxy.php?url=http://twitter.com/statuses/user_timeline/999999999.rss', function(d) {    
        $(d).find('item').each(function() {
            var theItem = $(this);
            var title = theItem.find('title').text();


            var date = new Date(theItem.find('pubDate').text());
            var alink = theItem.find('link').text();

            // code ommitted (inserts tweet into page)
        });
  });

proxy.php:

<?php
    // PHP Proxy
    // Loads a XML from any location. Used with Flash/Flex apps to bypass security restrictions
    // Author: Paulo Fierro
    // January 29, 2006
    // usage: proxy.php?url=http://mysite.com/myxml.xml

    $session = curl_init($_GET['url']);                    // Open the Curl session
    curl_setopt($session, CURLOPT_HEADER, false);          // Don't return HTTP headers
    curl_setopt($session, CURLOPT_RETURNTRANSFER, true);   // Do return the contents of the call
    $xml = curl_exec($session);                            // Make the call

    $seconds_to_cache = 300; // five mins (60 * 5)
    $ts = gmdate("D, d M Y H:i:s", time() + $seconds_to_cache) . " GMT";
    header("Expires: $ts");
    header("Pragma: cache");
    header("Cache-Control: maxage=$seconds_to_cache");
    //header("Content-Type: text/xml");   // Set the content type appropriately
    header("Content-Type: application/rss+xml");
    echo $xml;        // Spit out the xml
    curl_close($session); // And close the session
?>

Любые идеи / помощь будут с благодарностью

Ответы [ 3 ]

1 голос
/ 11 февраля 2011

Разобрался.IE необходимо установить тип содержимого text / xml.Я изменил скрипт proxy.php:

header("Content-Type: text/xml");

, и это было все, что мне было нужно.

0 голосов
/ 11 февраля 2011

У меня была эта проблема раньше, и вы правы - вы видите это в основном в IE.Это исправление:

$(document).ready(function() {
  $.ajaxSetup ({
    cache: false
  });
});

Примените это свойство на своей странице перед вызовом $ .get (), и это, скорее всего, устранит проблему.

0 голосов
/ 11 февраля 2011

EDIT:

Мне кажется, я знаю, что происходит. По умолчанию метод $.get() имеет тип возвращаемого содержимого text/html. Вы получаете данные XML и немедленно передаете их в функцию jQuery для оценки. Все браузеры, кроме IE, позволят вам создавать эти узлы XML, но если IE видит тип элемента, который он не распознает, он потерпит неудачу.

Похоже, что решение вашей проблемы состоит в том, чтобы явно сказать, что вы ожидаете XML от ответа. См. этот пример , чтобы узнать, как это сделать.

РЕДАКТИРОВАТЬ 2:

В дальнейшем чтении я видел, что в том, как IE правильно интерпретирует XML-код, сопутствует удача даже в приведенном выше примере. Если у вас все еще есть проблемы, вы всегда можете попробовать конвертировать XML в JSON на сервере (см. http://www.ibm.com/developerworks/xml/library/x-xml2jsonphp/ для рабочего class, который выполняет это). Вы сможете последовательно работать с JSON на стороне клиента, но вам необходимо соответствующим образом обновить функцию обработки данных success.

Оригинальный ответ:

Я бы хотел догадаться, что проблема в том, что IE очень рад кешировать URL. Я рекомендую добавить дополнительный, неиспользуемый, но случайно сгенерированный параметр строки запроса, чтобы обойти это.

$.get('proxy.php?url=http://twitter.com/statuses/user_timeline/999999999.rss&rand=' + Math.floor(Math.random()*999999), function() { //omitted });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...