我正在处理一个页面,该页面包含 div 中的各种 Youtube 视频缩略图,每个缩略图都有链接,<img>
并且容器上有 Masonry 来控制类切换以调整所选视频的大小。
这个想法是div
点击,这会触发砌体来更改 CSS 并触发.ajax()
对 django 的请求,该请求会返回所选视频的模板。(当您再次选择它以返回缩略图模板并使用 Masonry 重置为正常时,将执行相反的操作)。
就目前而言,我有两个 javascript 函数,一个在 div 上触发砌体,另一个在视频链接上触发 ajax 请求;
<script>
(function($) {
$(document).ready(function() {
var container = $('.masonry'), masonry;
//masonry = new Masonry(container[0]);
container.masonry('stamp', container.find('.stamp'));
container.unbind('click').on('click', '.item', function() {
var $this = $(this),
this_link = $this.find('a'),
$this_link = $(this_link),
this_href = $this_link.attr('href'),
video_id = $this.attr('data-video-id'),
gigante = $this.hasClass('gigante'),
selector = 'div#panel-area.video_grid div.masonry div.item.' + video_id;
$.ajax({
type: "GET",
async: false,
url: this_href,
timeout: 5000,
data: {'g': gigante},
dataType: 'html',
success : function(data) {
$(selector).html(data);
container.find('.item').removeClass('gigante');
$(this).toggleClass('gigante', !gigante);
container.masonry();
console.log('Selector: ' + selector + '\nSuccess');
}
})
.done(function(msg){
console.log('Done: ' + msg);
})
.fail(function(jqXHR, textStatus){
console.log('Failed: ' + textStatus);
});
});
});
})(jQuery); </script>
和 HTML;
<div class="masonry js-masonry" data-masonry-options='{ "stamp": ".stamp", "isOriginLeft": false }'>
<div class="mpus stamp">
</div>
<div class="item video {{ object.id }}" data-video-id="{{ object.id }}">
<a class="GetYoutubeVideo" href="{% url 'show_video' video_id=object.id %}">
<i class="icon-play-circled play"></i>
<span class="title">
{{ object.get_title|slice:":20" }}...<br/>
{{ object.date_created|date:"d/m/Y" }}
</span>
{{ object.get_img_tag }}
</a>
</div>
</div>
我本质上是一个 javascript 新手,所以我确信这是一个非常基本的问题。当我通过async
禁用的 chrome 开发工具运行它时,我看到 ajax 请求返回预期的内容,但最终最终出现在目标页面上,而不是$(selector)
按预期加载内容。当我启用async
它时,它会立即失败。我已经阅读文档很长时间了,但我觉得我没有取得任何进展。任何帮助,将不胜感激。