2

次の Javascript コードがあります。フィードは、RSS フィードへの有効な URL です。

jQuery(function() {

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

これを実行すると、アラートは表示されません。firebug を使用すると、接続が確立されていることと、フィードからの応答を確認できます。

注:これはセキュリティ上の問題であり、一部のブラウザはそれをブロックしていることを知っていますが、私はその問題を回避し、ブラウザが接続をブロックしなくなったため、当面はそうではありません

編集:何らかの理由でコメントを表示できないので、ここに:

これはブラウザのセキュリティ設定をオーバーライドするだけのテストであるため、現時点では呼び出しはスクリプトによってプロキシされていません。

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

4 に答える 4

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リクエストに送信します.ページが存在するサーバーとは異なるサーバー)。dataType : 'xml' で ajax 呼び出しを行う場合、jQuery は、応答のコンテンツ タイプに文字列 "xml" が含まれていることを想定します。

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

ここに私の質問があります:

  • 私が推測するように、プロキシスクリプトとしてスクリプトを使用しましたか?
  • このスクリプトは content-type を xml を含むものに設定しますか?

jFeed に同梱されている最小限の php サンプルを次に示します。

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

if ($handle) {
    while (!feof($handle)) {
        $buffer = fgets($handle, 4096);
        echo $buffer;
    }
    fclose($handle);
}
?>
于 2009-03-19T13:23:34.617 に答える
2

カスタマイズされた名前空間を使用してフィードからコンテンツを取得する必要がある人のために追加すると、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");

この日が、jQuery を使用して xml で名前空間を処理するのに苦労している誰かの助けになることを願っています。私は NYT からの RSSfeeds を使用しており、ビデオ コンテンツへのリンクに表示するメディア サムネイルを取得する必要があり、名前空間を介して作業する方法を理解するのに時間を費やす必要がありました。

于 2009-08-09T18:34:12.833 に答える
0

カスタム名前空間からコンテンツを読み取りたい場合は、もう 1 つ:

上記の ('エスケープされたコロン') メソッドは Chrome では正しく機能しませんが、この ('nodeName') アプローチはすべてのブラウザで機能します:

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

于 2010-03-09T10:12:52.767 に答える
0

同様の問題がありました。フィード変数を設定するのではなく、URL を url: にハードコーディングしてみて、それが機能するかどうかを確認してください。

セグメントの最後に余分な } がありますが、それはコードの余分な部分ですか?

于 2009-03-19T12:24:17.507 に答える