我們在有些地方可能需要對服務器返回的參數做多步處理,或者很多復雜的操作必須等到服務器返回結果之后才會執行,那么我們可以用鏈式調用的then方法讓這里做到更加易於擴展,也更加容易分離出各個功能模塊。基本的方法如下。
1 doSubmit: function(){
3 return $.ajax({ 4 url: url, 5 type: 'post', 6 data: $("#fm").serialize(), 7 dataType: 'html' 8 }).then(function(data){ 9 toastr.error(" 提交成功", "操作成功"); 10 }, function(){ 11 toastr.error("提交失敗", "操作失敗"); 12 }); 13},
在這里對於返回的對象,可以在其他調用此方法的方法中如下處理:
this.doSubmit().then(function(data){ console.log(data) });
但在這里僅僅會進行打印,可是並不會是從服務器端傳回的data,為了使這個data值能夠傳遞至下面我們調用的地方,我們可以對上面的doSubmit做一點小小的處理,
這里我選擇方法是采用$.Deferred(),有關於這個相關的概念和功能用法等可以參考阮一峰老師的博文已經閱覽官方文檔,這里就不一一介紹了。
對doSubmit()方法等改造如下:
doSubmit: function(){ var dtd = $.Deferred(); $.ajax({ url: url, type: 'post', data: $("#fm").serialize(), dataType: 'html' }).then(function(data){ dtd.resolve(data); }, function(){ toastr.error("提交失敗", "操作失敗"); dtd.reject(); }); return dtd.promise(); },
這樣就可以將data數據繼續傳遞至調用該方法接下去執行的then()方法的回調函數中了。