Javascript 如何确保此get函数完全完成并呈现后运行其他函数?

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

我有一个脚本,它通过get json函数添加带有数据的元素

 $(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我不认为我应该在参数中添加一些东西,你能给我一个提示吗?