2013-03-18 58 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