【发布时间】:2015-04-05 20:05:44
【问题描述】:
我正在尝试使用 jQuery 移动开发应用程序。我有一个 JSON 文件:
[{
"title": "title you desire",
"url" : "thisistheurl.com"
},{
"title": "title you desire",
"url" : "thisistheurl.com"
},{
"title": "title you desire",
"url" : "thisistheurl.com"
}]
我现在正在将文件中的数据检索到 JS 中的对象数组中:
var linkList = [];
$.getJSON('linklist.json').success(function (json) {
$.each(json, function(i, obj) {
linkList.push(obj);
});
}).then(function() {
linkList.sort(function(a, b){
var nameA=a.title.toLowerCase(), nameB=b.title.toLowerCase();
if (nameA < nameB) //sort string ascending
return -1;
if (nameA > nameB)
return 1;
return 0; //default return value (no sorting)
});
$.each( linkList, function( key, val ) {
var $li;
$li = $("<li><a href='#' data-status='Downloaded'>"+val.title+"</a></li>");
window.resolveLocalFileSystemURL(fileSource + val.title + ".pdf", success, fail);
function success() {
$li.find("a").on("click", function(){ openPdf(val.title); });
$li.find("a").data('status', 'Downloaded');
$("#linkList").append($li).listview('refresh');
}
function fail() {
$li.find("a").on("click", function(){ downloadPdf(val.title,val.url); });
$li.find("a").data('status', 'Not downloaded');
$("#linkList").append($li).listview('refresh');
}
});
$("#linkList")
.listview({
autodividers: true,
autodividersSelector: function (li) {
var out = li.find('a').data("status");
return out;
}
}).listview('refresh');
});
}
我正在使用Phonegap并在我的手机上进行测试,所以调试的方法并不多,但我的排序有问题。如果我没有排序,一切都可以正常工作(当然数据没有排序),但我希望有一种方法可以按标题对它们进行排序。
【问题讨论】:
-
那么,是因为 .getJSON 是异步的吗?如果是这样,我该如何排序?
-
我正在这样做,不是吗?
-
显然,您提供了回调。只需将其余代码放在那里,它就会工作
-
调试此问题的一个好方法是在本地提供您的 html 文件并使用 chrome 开发工具/控制台来检查 JavaScript 对象。
-
我已经添加了其余的代码。正如我所说,如果我删除排序,它会起作用(但没有排序)。
标签: jquery arrays json cordova sorting