Joe*_*oey 2 jquery callback delay getjson
我有一个jquery .each循环,它从json请求中检索具有特定类的页面上所有元素的远程数据.一组元素是一组li标签,我希望在使用li远程信息更新元素后使用另一个函数对其进行排序.
在.each循环之后传递sort函数不对列表进行排序,因为项目尚未从json请求中完成加载.分拣工作.如果我在排序函数传递作为.complete对的getJSON请求回调,但我只希望排序整个名单运行一次,而不是每个项目.
fetch_remote_data(function(){sort_list_by_name();});
function fetch_remote_data(f){
jQuery('.fetching').each(function(){
var oj = this;
var kind = this.getAttribute('data-kind');
var url = "http://something.com"
jQuery.getJSON(url, function(json){
$(oj).text(json[kind]);
$(oj).toggleClass('fetching');
});
});
if (typeof f == 'function') f();
};
Run Code Online (Sandbox Code Playgroud)
有什么建议?
如果你正在使用jQuery 1.5,你可以利用它的$ .Deferred实现:
function fetch_remote_data(f) {
var requests = [],
oj = this,
url = "http://something.com";
$('fetching').each(function() {
var request = $.getJSON(url, function(json) {
$(oj).text(json['name']);
$(oj).toggleClass('fetching');
});
requests.push(request);
});
if (typeof f === 'function')
$.when(requests).done(f);
}
// No need to wrap this in another function.
fetch_remote_data(sort_list_by_name);
Run Code Online (Sandbox Code Playgroud)
我假设$('fetching')你的例子中的位不是真正的代码?该选择器将搜索<fetching>DOM中的元素,这可能不是您想要的.
| 归档时间: |
|
| 查看次数: |
3240 次 |
| 最近记录: |