我可以不止一次使用jquery的.done()吗?

时间:2013-11-19 14:25:01

标签: javascript jquery

我有2个JS文字:

var obj1 = {
    Add: function (id) {
        $.ajax({
            type: "POST",
            data: JSON.stringify({
                "id": id
            }),
            url: "Page.aspx/add",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                return jQuery.parseJSON(data.d || "null");
            }
        });
    }
};
var obj2 = {
    List: function (id) {
        $.ajax({
            type: "POST",
            data: JSON.stringify({
                "id": id
            }),
            url: "Page.aspx/list",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                return jQuery.parseJSON(data.d || "null");
            }
        });
    }
};

这是我的文件。已经:

$(document).ready(function () {
    obj1.Add(1).done(function (data) {
        alert('you added ' + data);
    });

    obj2.List().done(function (data) {
         $.each(jQuery.parseJSON(data), function (i, item) {
            // fill a combo box
        });
    });
});

jQuery只执行第一次调用,而根本没有调用obj2.List()。 在这种情况下如何正确使用被保护的对象?

1 个答案:

答案 0 :(得分:2)

将您的AddList功能更改为返回 ajax对象。

 Add: function (id) {
                 return  $.ajax({..

 List: function (id) {
         return   $.ajax({...

这样 - 它将返回将返回延迟对象的jqXHR obj。 这实现了Promise接口,它具有:您正在寻找的回调。

编辑:

look at this simple example which does work :

var obj1 = {
    Add: function (id) {
      return  $.ajax({
            type: "get",
            data: JSON.stringify({
                "id": 1
            }),
            url: "http://jsbin.com/AxisAmi/1/quiet",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {


              alert("at success --"+data.data)
            }
        });
    }
};

obj1.Add(2).done(function (a){alert("at done --"+a.data);});

enter image description here

enter image description here