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

时间:2013-10-08 08:58:53

标签: javascript jquery

我有这个脚本,通过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()));
    });
 });

-

get: function(web) {
            AST.Utils.JSON.get("/_vti_bin/AST/ListItem/ListitemService.svc/GetListItem", null, AST.Listitem.renderListitem);
        },
renderListitem: function(data) {
            $("#Listitem-template").tmpl(data["ListItemResults"]).prependTo(".ListItem-section-template");
    }

这里是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 }
    });
}

每个循环都没有运行数组因为get方法没有完成呈现Listitem-section-item-title选择器所以它找不到选择器。

对此有什么好的解决方案吗?

3 个答案:

答案 0 :(得分:1)

您可以更改功能以返回$.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()));
        });
    });
 });

答案 1 :(得分:0)

<强>回调:

$(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);
});

答案 2 :(得分:-1)

检索值并成功时,调用一个将值推入数组的函数。

此外,arr.push($(this.text()));应为arr.push($(this).text());