2011-07-13 97 views
0

首先,我是一個完整的JavaScript和jQuery noob,所以我很抱歉,如果這個問題是愚蠢的。但我真的沒有找到答案在jQuery文檔或谷歌如何訪問jqxhr.complete函數中的responseText

我試圖執行一個響應時,請求完成 但我無法訪問responseText的行動。我的印象是jqxhr objext有一個成員responseText。但我得到以下錯誤「responseText未定義」。

this.load = function(fileName, actionFunction){ 
    var jqxhr = $.post(SERVER,{command : "load", filename : fileName}) 
    .complete(function(){ 
     actionFunction(responseText); 
    }); 
} 

編輯

,如果我做

.complete(function(responseText){ actionFunction(responseText);} 

或戴夫沃德建議

我沒有得到一個錯誤,但沒有任何反應

我知道它不是」 t actionFunction(),因爲如果我爲測試目的手動輸入一個字符串,它做我期望的d O操作。

當試圖查看哪些參數過去(打印到控制檯的actionfunction)我得到[對象對象];即使試圖將其轉換爲字符串(字符串(參數))

編輯完

什麼我做錯了什麼或如何訪問的responseText在.complete功能?

TNX提前

回答

1

$.post方法是對$.ajax的調用的簡寫,預定義某些參數。

the documentation on the ajax function from jQuery's website,該complete回調傳遞參數:jqXHRtextStatus,其中jqXHR是實際XMLHTTPRequest對象。

所以這是你想傳遞給你的處理程序第二參數:

.complete(function(jqXHR, responseText) { 
    actionFunction(responseText); 
}); 

需要注意的是,作爲Dave Ward says in his answerresponseText在這種情況下,實際上只是一個狀態指示燈,比如「成功」或「錯誤「(因此jQuery的名字,」textStatus「)。鑑於你有這個詞在你的變量名「響應」,我猜(他一樣),你可能希望success回調,而不是complete

.success(function(data, textStatus, jqXHR) { 
    actionFunction(renderDataToString(data)); 
}); 
在這兩種情況下,打印出了參數時,沒有任何反應
+0

非常感謝你的幫助 – danny

0

的問題是,你是不是捕捉您的匿名函數響應參數,所以當你從內部調用actionFunction它沒有定義。你可以解決這個問題是這樣的:

.complete(function(responseText) { 
    actionFunction(responseText); 
}); 

更重要的是,你可以利用JavaScript的功能性質,只是傳遞函數本身作爲回調.complete:

.complete(actionFunction); 

你actionFunction自動將用你期望的參數調用。

+0

給予firebug中的actionFunction我得到[object Object];我嘗試使用字符串(參數),但沒有工作 – danny

+0

從聽起來你想要做的,我認爲你想要.success回調,而不是.complete。它的第一個參數是從POST返回的數據。 .complete更通用,並將jqXHR和狀態作爲參數傳遞,而不是原始響應本身。 –

+0

非常感謝你的幫助,你是對的。我選擇了丹濤作爲答案,因爲你的答案在這裏作爲評論 – danny