1

コンテキスト: このリンクに基づいて、tumblr の特定の投稿を気に入るように JavaScript 関数をコーディングしようとしています。iframe のソースを変更する代わりに ajax 呼び出しを使用しようとしましたが、うまくいきません。もちろん、iframe のソースを変更しても機能します。

では、これを機能させない違いは何でしょうか?

$baseUrl = 'http://tumblr.com/like/';

function LikePost( $postID, $reblogUrl )
{
    /*
    http://www.tumblr.com/<command>/<oauthId>?id=<postId>
    <command>: like or unlike
    <oauthId>: last eight characters of {ReblogURL}
    <postId>: {PostID}

     Exemple of Url
     http://www.tumblr.com/like/fGKvAJgQ?id=16664837215

    */
    $oauthId = $reblogUrl.substring( $reblogUrl.length - 8, $reblogUrl.length);
    $likeUrl = $baseUrl + $oauthId + '?id=' + $postID;

    $.ajax({
        url: $likeUrl,
        type:'POST'            
        });

}
4

2 に答える 2

1

AJAX リクエストは同じドメイン ポリシーによってバインドされますが、両方のドメインを制御しないと機能しないため、リストする価値のないいくつかの例外があります。

この場合、Web サイトから tumblr ドメインを呼び出していますが、これは AJAX では実行できません。ただし、iframe、script 要素、および img 要素は任意のドメインを指すことができるため、いいね! の URL がコンテンツを返さない場合は、これらの手段のいずれかを使用していいね! を記録できます。

iframe を使用したくない場合は、AJAX 経由でサーバーにリクエストを送信し、そのリクエストを tumblr にプロキシするという別の方法を使用できます。サーバーは、必要な任意の URL にアクセスできます。

ただし、iframe アプローチが最も簡単です。すでに機能しているので、そのルートに進むことをお勧めします。;)

于 2012-11-06T04:26:48.443 に答える
1

それらは異なる目的のために意図されています。jmort253 が前述したように、AJAX呼び出しは同じドメインに対してのみ機能しますが、Iframe は異なるドメインにまたがる場合があります。ただし、同じドメインからデータをロードすることに関心があるAJAX場合は、より良いオプションになる可能性があります。多くの場合、IFrame を使用しているときに、ページのタブバーに読み込みサインが表示され、ページ内の何かが読み込まれていることを示します (ページ全体ではなく、読み込み中の IFrame ページです)。これは望ましくありません。これは、データをシームレスにロードすることのポイントであるためAJAX、データがほぼ同時に来るという錯覚をユーザーに与えます。を使用AJAXすると、これらの問題は発生しません。

また、異なるドメインからデータをロードしたい場合でも、Javascript 自体はそのタスクに対応していませんが、PHP を使用してロード部分を実行し、Javascript を使用してそこからデータを取得できます。

于 2012-11-06T04:34:43.487 に答える