2009-03-19 3 views
2

У меня есть следующий код Javascript, где фид является действительным URL-адресом для rss-канала.jFeed - функция sucess не выполняется (плагин jQuery)

jQuery(function() { 

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

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

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

EDIT: по какой-то причине я не могу сделать комментарий показать это здесь:

вЫЗОВ МАСТЕРА Isnt быть proxyed скриптом в данный момент, так как это тест им просто главенствующими настройки безопасности браузера с:

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

В какой версии jQuery вы используете? Если это 1.3+, попробуйте перейти к 1.2.6 и повторите попытку. – Steerpike

+0

im, использующий 1.3.2, но я пробовал с 1.2.6, и теперь я даже не вижу, чтобы вызов был сделан в URL-адрес канала –

ответ

3

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

$.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 вызова с 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); 
} 
?> 
+0

ничего не происходит , я даже добавил предупреждения к этой функции, и ничего не происходит –

+0

Это означает, что вызов ajax никогда не преуспевает, не имеет ничего общего с jFeed? Можете ли вы попытаться изменить тип данных на «текст»? (вам не нужно использовать jQuery.getFeed, просто вызовите напрямую $ .ajax) – ybo

+0

, если я изменю этот тип данных на текст, вызов ajax удастся, и появится предупреждение, и когда я вернусь к первому изменению, которое я сделал, я теперь могу использовать как это было предусмотрено. Может ли это быть проблемой в rss-канале? –

0

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

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

+0

, который не решает проблему, и да дополнительный} поступает из предыдущего кода –

2

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

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

Добавить свои собственные элементы JFeed Прототип

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. Я работаю с RSSfeeds из NYT и должен получить миниатюры мультимедиа для отображения в ссылках на видеоконтент и должен был потратить некоторое время, чтобы выяснить, как работать через пространства имен.

0

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

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

item.mediaThumbnail = $ ($ (это) .find ("[NodeName = медиа: эскиз]"..) экв (0)) атр ("URL");