2013-03-18 83 views
1

我有一个页面movies.jsp,通过页面home.jsp中的ajax调用。 movies.jsp包含了IMDB评分插件代码(link):IMDB评分插件不能与ajax一起工作

<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,但那不起作用。和想法?

回答

1

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

IMDb评级插件库实际上很好地解释和评论在version

+0

如何在代码中添加imdb.rating.createJSONP()? – 2014-12-01 11:12:36

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()现在强制该功能每次都完全运行。我还没有理解这个黑客背后的完整科学,但它的工作原理。

+0

嗯,删除return语句为我做了诀窍。 – SexyBeast 2017-05-09 00:09:24