1

movies.jsppageから ajax を介して呼び出されるページがありますhome.jspmovies.jspIMDB評価プラグインのコードが含まれています(リンク):

<span class="imdbRatingPlugin" data-user="ur17960624" data-title="<%=request.getParameter("movieId") %>" data-style="p4">
    <a href="http://www.imdb.com/title/<%=request.getParameter("movieId") %>/?ref_=plg_rt_1">
        <img src="http://g-ecx.images-amazon.com/images/G/01/imdb/plugins/rating/images/imdb_31x14.png" alt="Oz the Great and Powerful (2013) on IMDb" />
    </a>
</span>
<script>(function(d,s,id){var js,stags=d.getElementsByTagName(s)[0];if(d.getElementById(id)){return;}js=d.createElement(s);js.id=id;js.src="http://g-ec2.images-amazon.com/images/G/01/imdb/plugins/rating/js/rating.min.js";stags.parentNode.insertBefore(js,stags);})(document,'script','imdb-rating-api');</script>

私のajaxリクエストは次のように呼び出されます:

$(document).on('click', 'imdb-button', function(){
    $('content').load('movies.jsp&movieId='+imdbmovieId');
});

問題は、リクエストが最初は正常に機能することですが、他の movieId を持つ他の映画をクリックすると、IMDB ロゴだけが返され、評価は返されません。プラグインのスクリプトに問題があると思われます。スクリプトをjquery関数で囲み、その関数をload毎回へのコールバックとして起動しようとしましたが、うまくいきません。そしてアイデア?

4

2 に答える 2

1

私もプラグインをいじっていたので、いくつかの洞察を共有できます。最初のページ読み込み後に IMDb 評価を挿入する場合はrating.min.js、要素を追加するたびに呼び出す必要があります。imdb.rating.createJSONP()スクリプト全体を再度ロードする必要がないため、おそらくより良い解決策である function を呼び出すこともできます。この関数は、検出したすべての imdb<span>タグを反復処理することを知っておく必要があります。

IMDb レーティング プラグイン ライブラリは、実際にはこのバージョンで非常によく説明され、コメントされています。

于 2013-03-19T01:05:57.690 に答える
1

問題を解決しました。問題は、すべての ajax リクエストで、次のスクリプト タグを作成していたことです。

<script src="http://g-ec2.images-amazon.com/images/G/01/imdb/plugins/rating/js/rating.min.js" id="imdb-jsonp-tt12312312">
</script>

複数の ajax は、そのようなタグが複数あることを意味し、. 次のハックを試してみましたが、うまくいきます:

$(document).on('click', 'imdb-button', function(){
    $('content').load('movies.jsp&movieId='+imdbmovieId', function(){
        imdbRatingTrigger();
    });
});

function imdbRatingTrigger(){
    $('[id^="imdb-jsonp"]').remove(); //to prevent creation of multiple script tags.

    (function(d,s,id){
        var js,stags=d.getElementsByTagName(s)[0];if(d.getElementById(id)){}js=d.createElement(s);js.id=id;js.src="http://g-ec2.images-amazon.com/images/G/01/imdb/plugins/rating/js/rating.min.js";stags.parentNode.insertBefore(js,stags);
    })(document,'script','imdb-rating-api');
}

$('[id^="imdb-jsonp"]').remove();これらの重複したスクリプト タグを削除するのに役立ちます。return;また、javascript 関数から削除しましたfunction(d,s,id()。これにより、関数が毎回完全に実行されるようになりました。このハッキングの背後にある科学を完全には理解していませんが、うまくいきます。

于 2013-03-19T08:37:23.610 に答える