【发布时间】:2014-07-19 04:17:19
【问题描述】:
我有一个看似简单的博客项目正在进行中,我试图将Isotope Jquery(用于布局/过滤/排序)、Infinite Scroll 以及通过 Ajax 动态加载所有博客摘录(所以过滤和排序在用户向下滚动页面之前应用于所有摘录(之后它们被加载到 dom 中然后可以访问)。
这个问题主要涉及通过 Ajax 获取博客文章摘录数据,然后将其传递到 Isotope 过滤代码中。我不确定执行此操作的最佳方法,但目前正在尝试使用 ajax 请求遍历每个页面(博客文章摘录),然后整体访问数据。
我遇到了两种不同的方法来遍历 ajax 请求,每种方法都使用 then when jquery 语句。第一种是使用this SO answer 中的方法,另一种是将整个then when 语句放入$.each 语句中。
方法一:
var pageCount = 15;
var pageCountArray = [];
for (var i = 1; i != pageCount; ++i) pageCountArray.push(i);
var deferreds = [];
$(pageCountArray).each(function() {
var pageNumber = this;
deferreds.push(
$.get('/page/' + pageNumber)
)
$.when.apply($, deferreds)
.then(function(data){
console.log(data);
// this outputs data as a string from the first page, then a list of objects
console.log(typeof(data));
// string
// 13 - object
});
});
略过:关于为什么输出一个字符串然后输出对象的任何想法?
方法二:
var pageCount = 15;
var pageCountArray = [];
for (var i = 1; i != pageCount; ++i) pageCountArray.push(i);
$(pageCountArray).each(function(data) {
var pageNumber = this;
$.when(
$.get('/page/' + pageNumber)
).then(function() {
console.log(data);
// this outputs 14 strings of data
console.log(typeof(data));
// 14 - string
})
});
我还没有弄清楚如何将 Ajaxed 数据合并到我的 Isotope 过滤器函数中,但我认为我需要先将其解析为 HTML。仍然让我的 javascript 立足……在这种情况下,这些数据类型(对象与字符串)中的一种更容易解析成 HTML 吗?我想这就是我答案的关键吗?
非常需要洞察力。
PS:对于任何可能知道以不同方式实现这一目标的更好方法的人的奖励积分,以某种方式很好地融入同位素/无限滚动(也许以一种更适合玩的方式使用这些插件...我的搜索没有成功)。
PPS:第二种方法感觉更干净......任何人都知道它不是一个好方法的原因(在.each中使用when then循环)?
【问题讨论】:
-
Method2 不需要
$.when或.then。 Method1 可以使用.done代替.then。 Method1 和 method2 做了两件完全不同的事情,得到了两个完全不同的结果。您使用的应该基于您想要的结果。一个并不比另一个更好或更干净,只是不同而已。
标签: javascript jquery ajax jquery-isotope infinite-scroll