0

我有这堂课:

function Clazz() {
this.id;
this.description;
}

Clazz.prototype._insert = function(_description, _success, _error) {

this.description = _description;

$.ajax({
    type : "PUT",
    url : "api/route",
    data : JSON.stringify(this),
    dataType : "json",
    contentType : "application/json;charset=UTF-8",
    success : function() {
        _success($("#message"), 'OK');
    },
    error : function() {
        _error($("#message"), 'FAIL');
    }
});
};

Clazz.prototype._findAll = function(_callback) {

$.ajax({
    type : "GET",
    url : "api/route",
    dataType : "json",
    success : function(data) {
        _callback(data);
    }
});
};

在按钮单击时,我有这个:

var clazz = new Clazz();
clazz._insert($("#description").val(), success, error);
clazz._findAll(loadCallback);

在 loadCallback 方法下面:

function loadCallback(data){
    var oTable = $('#table').dataTable({
        "bRetrieve": true,
        "bDestroy" : true,
        "bFilter" : false,
        "bLengthChange" : false,
        "bInfo" : false,
        "sDom" : "<'row'<'span5'l><'span5'f>r>t<'row'<'span5'i><'span5'p>>",
        "sPaginationType" : "bootstrap",
        "oLanguage" : {
            "sProcessing" : "Loading ...",
            "sZeroRecords" : "No records",
            "oPaginate" : {
                "sNext" : "",
                "sPrevious" : ""
            }
        },
        "iDisplayLength" : 4,
        "aaData" : data,
        "aoColumnDefs" : [ 
                     { "aTargets" : [0], "mData" : "description", "sTitle" : "My Data" },

                     { "aTargets" : [1], 
                            "sWidth" : "20px",
                            "mData" : "id", 
                            "bSortable" : false,
                            "mRender" : function ( data ) {
                                    return '<a href="#" name="route-' + data + '" route="' + data + '"><img src="img/img01.png" style="height: 20px; width: 20px;"/></a>';
                            }
                         },
                         { "aTargets" : [2], 
                            "sWidth" : "20px",
                            "mData" : "id", 
                            "bSortable" : false,
                            "mRender" : function ( data ) {
                                    return '<a href="#" name="route-' + data + '" route="' + data + '"><img src="img/img02.png" style="height: 20px; width: 20px;"/></a>';
                            }
                         },
                     { "aTargets" : [3], 
                            "sWidth" : "20px",
                            "mData" : "id", 
                            "bSortable" : false,
                            "mRender" : function ( data ) {
                                    return '<a href="#" name="route-' + data + '" route="' + data + '"><img src="img/img03.png" style="height: 20px; width: 20px;"/></a>';
                            }
                         }
                     ],
        "fnHeaderCallback" : function( nHead ) {
            $(nHead.getElementsByTagName('th')[0]).attr("colspan","4");
            for(var i = 1; i <= 3; i++){
                $(nHead.getElementsByTagName('th')[1]).remove();
            }
        },
        "fnRowCallback" : function( nRow ) {
                $(nRow.getElementsByTagName('td')[1]).attr("width","20px");
                $(nRow.getElementsByTagName('td')[2]).attr("width","20px");
                $(nRow.getElementsByTagName('td')[3]).attr("width","20px");
        }

    });
    oTable.fnClearTable();
    oTable.fnAddData(data);
    oTable.fnDraw();
}

我希望该方法clazz._findAll(loadCallback);仅在clazz._insert完成后执行。

我已经尝试过$.when,但没有奏效。

4

2 回答 2

0

$.when如果clazz._insert返回$.ajax函数调用(它目前没有)应该可以工作。

如果您$.ajax回电,您应该能够执行以下操作:

$.when(clazz._insert(...stuff...)).then(clazz._findAll(...stuff...));

仔细检查有关延迟对象的文档可能是个好主意。

于 2013-04-04T18:56:46.050 回答
0

我解决了这样做:

  1. 放入return $.ajax(...stuff...)插入方法
  2. 使用

    $.when(clazz._insert($("#description").val())).done(
        function(){
            clazz._findAll(loadCallback);
        }
    );
    

我不得不调用_findAll内部匿名函数。

于 2013-04-04T20:01:19.690 回答