jFeed - функция успеха не выполняется (плагин jQuery)
У меня есть следующий код Javascript, где feed является действительным URL для RSS-канала.
jQuery(function() {
jQuery.getFeed({
url:feed,
success: function(feed){
alert(feed);
}
});
});}
когда я запускаю это предупреждение никогда не появляется. с помощью firebug я вижу, как выполняется соединение и ответ от канала.
Примечание: я знаю, что это проблема безопасности, и некоторые браузеры блокируют ее, но дело не в этом, потому что я решил эту проблему, и браузер больше не блокирует соединение
РЕДАКТИРОВАТЬ: по какой-то причине я не могу сделать комментарий, так что здесь:
В данный момент вызов не передается через прокси-сервер, так как это тест, который просто переопределяет настройки безопасности браузера с помощью:
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
4 ответа
С информацией, которую вы предоставляете, мы видим, что ваш звонок правильный. Проблема, вероятно, где-то еще. Предполагается, что вы покопаетесь в исходном коде 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);
}
?>
Просто добавьте, что для тех, кому нужно получать контент из каналов с настраиваемыми пространствами имен, с 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.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-новостями из Нью-Йорк Таймса, и мне нужно было получить эскизы мультимедиа для отображения в ссылках на видеоконтент, и мне пришлось потратить некоторое время, чтобы выяснить, как работать через пространства имен
У меня была похожая проблема. Попробуйте жестко запрограммировать URL в URL: и посмотрите, работает ли это, а не устанавливайте переменную канала.
У вас есть дополнительный} в конце вашего сегмента, это просто дополнительная часть вашего кода?
Еще одна вещь, если вы хотите читать содержимое из пользовательских пространств имен:
метод выше ('escape-двоеточие') не будет работать должным образом в Chrome, но этот подход ('nodeName') будет работать во всех браузерах:
item.mediaThumbnail = $ ($ (this).find ("[nodeName = media: thumbnail]"). eq (0)). attr ("url");