jFeed - функция успеха не выполняется (плагин jQuery) - PullRequest
2 голосов
/ 19 марта 2009

У меня есть следующий код Javascript, где feed является действительным URL-адресом для RSS-канала.

jQuery(function() {

        jQuery.getFeed({
            url:feed,
            success: function(feed){
                      alert(feed);
                      }
        });
    });}

когда я запускаю это предупреждение никогда не появляется. с помощью firebug я вижу, как установлено соединение и ответ от фида.

Примечание: я знаю, что это проблема безопасности, и некоторые браузеры блокируют ее, но дело не в этом, потому что я решил эту проблему, и браузер больше не блокирует соединение *

РЕДАКТИРОВАТЬ: по какой-то причине я не могу сделать комментарий, поэтому здесь:

В данный момент вызов не передается через прокси-сервер, поскольку это тест, который просто переопределяет настройки безопасности браузера с помощью:

netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");

Ответы [ 4 ]

3 голосов
/ 19 марта 2009

С предоставленной вами информацией мы видим, что ваш звонок правильный. Проблема, вероятно, где-то еще. Предполагается, что вы копаете исходный код jFeed и отключаете разбор каналов в методе $ .ajax success:

    $.ajax({
        type: 'GET',
        url: options.url,
        data: options.data,
        dataType: 'xml',
        success: function(xml) {
            var feed = xml; // <== was "var feed = new JFeed(xml);"
            if(jQuery.isFunction(options.success)) options.success(feed);
        }
    });

Если всплывает ваше предупреждение, это проблема анализа фида. В этом случае вы можете проверить правильность xml и отправить его сюда для дальнейшего изучения.

<Ч />

Я провел несколько тестов и проверил код jQuery. Вы сказали, что обошли проблему безопасности браузера: я полагаю, что вы установили на своем сервере прокси-скрипт, который загрузит файл rss с удаленного сервера и затем передаст его на ваш запрос ajax (поскольку браузер будет блокировать вызовы ajax к сервер отличается от того, на котором находится ваша страница). При выполнении ajax-вызова с dataType: 'xml' jQuery ожидает, что тип содержимого ответа будет содержать строку "xml":

var ct = xhr.getResponseHeader("content-type"),
  xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0,
  data = xml ? xhr.responseXML : xhr.responseText;

Вот мои вопросы:

  • Вы использовали сценарий в качестве прокси-сценария, как я полагаю?
  • Этот сценарий устанавливает тип содержимого для содержимого, содержащего xml?

Вот пример минималистичного php, поставляемого с jFeed:

<?php
header('Content-type: application/xml');
$handle = fopen($_REQUEST['url'], "r");

if ($handle) {
    while (!feof($handle)) {
        $buffer = fgets($handle, 4096);
        echo $buffer;
    }
    fclose($handle);
}
?>
2 голосов
/ 09 августа 2009

Просто добавьте, что для тех, кому нужно получать контент из каналов с настроенными пространствами имен, с jFeed, вы можете сделать что-то вроде этого

<dc:creator>SomeBody Name</dc:creator>
<media:thumbnail url="someimage.jpg" />

Добавьте свои собственные предметы в JFeed Prototype

JFeedItem.prototype = {
        title: '',
        link: '',
        description: '',
        updated: '',
        id: '',
        mcontent:'',
        mdescr:'',
        mcredit: '',
        dcreator:'',
        mthumbnail:''
    };

Затем к прототипу JRss и JAtom, который когда-либо использовался вами, добавьте следующую петлю item

item.dcreator = $(this).find("dc\\:creator").eq(0).text();
item.mcontent = $(this).find("media\\:content").eq(0);
item.mdescr = $(this).find("media\\:description").eq(0).text();
item.mcredit = $(this).find("media\\:creator").eq(0).text();
item.mthumbnail = $( $(this).find("media\\:thumbnail").eq(0) ).attr("url");

Надеюсь, что этот день поможет кому-то слишком трудно справляться с обработкой пространств имен в xml с помощью jQuery. Я работаю с RSS-лентами из Нью-Йорк Таймса, и мне нужно, чтобы мультимедийные эскизы отображались в ссылках на видеоконтент, и мне пришлось потратить некоторое время, чтобы выяснить, как работать через пространства имен

0 голосов
/ 09 марта 2010

еще одна вещь, если вы хотите читать содержимое из пользовательских пространств имен:

вышеуказанный метод ('escape-двоеточие') не будет работать должным образом в Chrome, но этот подход ('nodeName') будет работать во всех браузерах:

item.mediaThumbnail = $ ($ (this) .find ("[nodeName = media: thumbnail]"). Eq (0)). Attr ("url");

0 голосов
/ 19 марта 2009

У меня была похожая проблема. Попробуйте жестко запрограммировать URL в URL: и посмотрите, работает ли это, а не устанавливайте переменную канала.

У вас есть дополнительный} в конце вашего сегмента, это просто дополнительная часть вашего кода?

...