Javascript 如何确保此get函数完全完成并呈现后运行其他函数?
我有一个脚本,它通过get json函数添加带有数据的元素Javascript 如何确保此get函数完全完成并呈现后运行其他函数?,javascript,jquery,Javascript,Jquery,我有一个脚本,它通过get json函数添加带有数据的元素 $(document).ready(function() { ADD.Listitem.get(); }); 它基本上添加了一组带有数据等的html标记。我遇到的问题如下: $(document).ready(function() { ADD.Listitem.get(); var arr = []; $(".Listitem-section-item-title").ea
$(document).ready(function() {
ADD.Listitem.get();
});
它基本上添加了一组带有数据等的html标记。我遇到的问题如下:
$(document).ready(function() {
ADD.Listitem.get();
var arr = [];
$(".Listitem-section-item-title").each(function() {
arr.push($(this.text()));
});
});
-
下面是json get:
ADD.Utils.JSON.get = function (url, data, onSuccess) {
$.ajax({
type: "GET",
contentType: "application/json; charset=utf-8",
async: true,
url: url,
data: data,
cache: false,
dataType: "json",
success: onSuccess,
error: ADD.Utils.JSON.error,
converters: { "text json": ADD.Utils.JSON.deserialize }
});
}
数组each循环未运行,因为get方法未完成呈现Listitem节项标题
选择器,因此找不到选择器
有什么好的解决方法吗?回调:
$(document).ready(function() {
ADD.Listitem.get(url,data,function(){
var arr = [];
$(".Listitem-section-item-title").each(function() {
arr.push($(this.text()));
});
});
});
无回调:
$(document).ready(function() {
ADD.Listitem.get(url,data,function(){
var arr = [];
$(".Listitem-section-item-title").each(function() {
arr.push($(this.text()));
});
});
});
如果您不能让get方法接受回调或返回承诺,那么我认为最好的方法是检查它何时完成
$(document).ready(function() {
ADD.Listitem.get();
var timer = setInterval(function(){
if ($("#thingWhichShouldExist").length>0){
var arr = [];
$(".Listitem-section-item-title").each(function() {
arr.push($(this.text()));
});
clearInterval(timer);
}
},50);
});
您可以更改函数以返回
$给出的承诺。ajax
:
ADD.Utils.JSON.get = function (url, data) {
return $.ajax({
type: "GET",
contentType: "application/json; charset=utf-8",
async: true,
url: url,
data: data,
cache: false,
dataType: "json",
converters: { "text json": ADD.Utils.JSON.deserialize }
}).fail(ADD.Utils.JSON.error);
}
get: function(web) {
return AST.Utils.JSON.get("/_vti_bin/AST/ListItem/ListitemService.svc/GetListItem", null).done(AST.Listitem.renderListitem);
},
这样你就可以
$(document).ready(function() {
ADD.Listitems.get().done(function(){
var arr = [];
$(".Listitem-section-item-title").each(function() {
arr.push($(this.text()));
});
});
});
检索值并在成功时调用一个函数,该函数将值推送到数组中
另外,
arr.push($(this.text())
应该是arr.push($(this.text())
如果get()
是异步的(看起来是异步的),它应该接受回调参数或返回承诺。您是该函数的作者吗?您的意思是get
是异步的吗?然后它可能接受回调或返回承诺[edit:damn,Frédéric更快…至少它是可见的,我同意:)]函数,然后将额外代码放入Ajax调用的Success函数中。@FrédéricHamidi是的,我会在第二时间发布它。你知道为什么吗?有两个函数需要修改以返回承诺。我展示的(ADD.Utils.JSON.get
)和您的ADD.Listitem.get
(我将其作为练习提供)。在get方法完成之前,.each()仍然不起作用。我添加的是在get:function()处返回ICC.Utils.JSON.get(..),现在我没有收到“cannotcallmethod'done'”。关于ADD.Listitem.get我不认为我应该在参数中添加一些东西,你能给我一个提示吗?