2014-03-13 58 views
0

我有這樣的代碼:jQuery中的回調函數的返回值?

function dialogTexts(message) { 
     var langText = $.ajax({ 
      type: 'GET', 
      url: '/index.php/main/dialogtexts', 
      dataType: 'json' 
     }); 

     langText.done(function(data) { 
      message(data); 
     });       

     langText.fail(function(ts) { 
      alert(ts.responseText); 
     }); 
    } 

    dialogTexts(function(text) { 
     alert(text.delete);   
    }); 

我使用一個回調來提醒串text.delete(在上面的代碼中),但我想要做的事,如:

dialogTexts(function(text) { 
    return text; 
}); 

var deleteConfirmationDialogText = dialogTexts.delete; 
alert(deleteConfirmationDialogText); //deleteConfirmationDialogText is undefined 
+0

我覺得「爲什麼我不能訪問回調之外的數據」 - 問題是目前最常見的問題...... – Johan

回答

1

dialogTexts是一個函數,它沒有一個屬性.delete。這就是爲什麼dialogTexts.deleteundefined當您嘗試使用它。你根本無法使用你想要做的那種快捷方式。


而且,在這裏return語句:

dialogTexts(function(text) { 
    return text; 
}); 

是什麼都不做。它只是返回到dialogTexts()內的那個回調的調用者,並且調用者沒有對返回值做任何事情,所以return text什麼都不做。

如果你想提醒的文字,你會做什麼,你首先必須:

dialogTexts(function(text) { 
    alert(text.delete);   
}); 

這是做的唯一途徑,這是一個如何異步編程與AJAX工作的後果調用。還有一些處理回調的其他技術(如承諾),但它們都要求您在回調函數中處理異步返回的數據。這只是異步編程的本質。

+0

我知道代碼不起作用,我正在尋找回答我應該如何實現我想要的:-)請問,你能指出我正確的方向嗎? – bestprogrammerintheworld

+0

@bestprogrammerintheworld - 閱讀我最近的編輯。 – jfriend00

+0

好的,所以如果我想實現我想要的目標,那麼要走的路是使用承諾? – bestprogrammerintheworld