0

私は、Java と Objective C のバックグラウンドから来た Javascript プログラミングの初心者です。ハイブリッド モバイル アプリケーションの Javascript についてもう少し学びたいと思っています。

そうすることで、コールバックでログインしようとしていますが、構文とコールバックの仕組みの両方を理解するのに少し苦労しています。

最初に、次のログイン関数を呼び出しています。これは、テスト目的ですぐに JSON を取得するための ajax 呼び出しを作成するだけです。

testLogin.loginWithUsername ("test", loginCallback);

ログに 200 OK ステータスと予想される JSON が表示されるので、これは問題なく動作します。

ただし、コールバック「loginCallBack」は呼び出されません。

それは次のとおりです。

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

まず、コードを実行しようとすると、success:function(id) 行で構文エラーが発生します。それと失敗関数を = function(id) に変更すると、コードが実行されますが、コールバックは呼び出されません。

必要なコールバックが成功と失敗の関数を必要とするオブジェクトであり、上記のコードがその例であると述べるログイン用のライブラリを使用しています。

まず、サンプル コードで上記の構文が機能する理由がわかりませんが、実行するとエラーが発生します。

次に、コールバックを正しく呼び出していますか? loginWithUsername 呼び出しと loginCallback 関数の両方が同じ Login.js ファイルにあります。

4

2 に答える 2

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'
于 2013-10-31T12:37:43.407 に答える