IMDB评级插件无法使用ajax

时间:2013-03-18 13:33:19

标签: javascript jquery ajax imdb

我有一个页面movies.jsp,它是通过页面home.jsp中的ajax调用的。 movies.jsp包含IMDB评级插件的代码(link):

<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');
});

问题是请求第一次正常,但点击其他movieIds的其他电影只返回IMDB徽标,没有评级。我怀疑插件中的脚本存在问题。我尝试将脚本封装在jquery函数中,并且每次都将该函数作为load的回调函数触发,但这不起作用。和想法?

2 个答案:

答案 0 :(得分:1)

我也在修补插件,可以分享一些见解。如果您在初始页面加载后插入IMDb评级,则每次添加元素时都需要调用rating.min.js。您也可以调用imdb.rating.createJSONP()函数,这可能是更好的解决方案,因为不需要再次加载整个脚本。您应该知道该函数会遍历它找到的所有imdb <span>标记。

IMDb评级插件库实际上在version中得到了很好的解释和评论。

答案 1 :(得分: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();有助于删除这些重复的脚本标记。我还从javascript函数中移除了return; - function(d,s,id()现在强制函数每次都完全运行。我不明白这个黑客背后的完整科学,但它的确有效。