2013-10-31 115 views
0

我是JavaScript編程的新手,來自Java和Objective C背景。我期待爲混合移動應用程序學習更多Javascript。JavaScript新手入門 - 回撥問題

爲此,我嘗試使用回調進行登錄,但我在理解語法和回調的工作方式方面遇到了一些麻煩。

首先登場的我打電話剛剛創建Ajax調用在一分鐘用於測試目的以獲取一些JSON以下登錄功能:

testLogin.loginWithUsername ("test", loginCallback); 

該工程確定,因爲我可以看到200個OK狀態和預計在日誌中使用JSON。

但是回調「loginCallBack」永遠不會被調用。

這是如下:

loginCallback: { 
success: function(id) { 
    alert ('success'); 
} 
failure: function (id, error) { 
    alert ('failure'); 
} 
} 

首先上面給了我一個語法錯誤,當我嘗試運行代碼,在成功:函數(ID)線。我可以將它和失敗函數更改爲= function(id),然後代碼運行,但回調從不被調用。

我正在使用登錄庫來說明所需的回調是需要成功和失敗功能的對象,上面的代碼是給出的示例。

所以首先我不明白爲什麼上面的語法在示例代碼中起作用,但是當我運行它時會給我一個錯誤?

其次我正確地調用回調? loginWithUsername調用和loginCallback函數都在同一個Login.js文件中。

回答

1

這裏是回調是如何工作的一個例子:

第一件事:你需要創建一個包含你的函數/方法的新對象。屬性和方法列出逗號分隔。現在

// Creating new object with callback functions 
var loginCallback = { 
    success: function(id) { 
    alert ('success'); 
    } , // Add a comma 
    failure: function (id, error) { 
     alert ('failure'); 
    } 
} 

function loginWithUsername(username, callback) { 
    if (username === 'test') { 
    var successId = 1; 
    callback.success(successId); 
    } else { 
    var errorId, errorMsg; 
    errorId = 0; 
    errorMsg = 'Error'; 
    callback.failure(errorId, errorMsg); 
    } 
} 

,你可以調用函數:

loginWithUsername('test', loginCallback); 

而且結果應該是 '成功的'。

編輯: 但你可以做到這一點沒有對象,通過直接傳遞函數:現在

// Creating function 
function showMessage(message) { 
    alert(message); 
} 

function loginWithUsername(username, callback) { 
    if (username === 'test') { 
    callback('success'); 
    } else { 
    callback('failure'); 
    } 
} 

// Pass function 
loginWithUsername('test', showMessage); // Result: 'success' 
loginWithUsername('abcd', showMessage); // Result: 'failure' 
+0

輝煌,不錯的直截了當的解釋,謝謝 –

1

首先,當我嘗試運行代碼時,出現語法錯誤:success(function)(id)line。

每個屬性:對象文本中的值對必須用逗號分隔。

}, /* Your comma is missing which is why you get a syntax error */ 
failure: 

此:

loginCallback: { 

如果要定義一個對象字面裏面的屬性是唯一可以接受的。

此:

testLogin.loginWithUsername ("test", loginCallback); 

使用可變。

你可能想:

var loginCallback = { 

但很難說沒有更多的上下文。

+0

工作,謝謝! –