2017-11-08 15 views
1

APIサーバーにajax呼び出しを行っています。コード内の複数の場所から/getobjectdetails/への特定の呼び出しを行っているので、私はそれを少しきれいにしようと思っていましたが、このようなコールバックを掘り下げたのは初めてです。私はテストとしてこれを呼び出すときajax関数からコールバックにパラメータを渡す方法

let api = (function() { 
    return { 
     getObjectDetails(id, successCallback, errorCallback) { 
      $.ajax({ 
       type: 'GET', 
       url: app.apiServerRoot + '/api/getobjectdetails/?Id=' + id, 
       beforeSend: function(xhr) { 
        xhr.setRequestHeader("Authorization", "Bearer " + user.authToken); 
       }, 
       success: successCallback(data,s,xhrdata), 
       error: errorCallback(e) 
      }); 
     } 
    } 
})(); 

:しかしここで私がしようとしたコードがある

api.getObjectDetails(1008,function(data,s,x){console.log(data)},function(e){console.log(e)}) 

私は次のエラーを取得する:

Uncaught ReferenceError: data is not defined 
    at Object.getObjectDetails (api.js:13) 
    at <anonymous>:1:5 

は私が間違って何をしているのですか?

答えて

2
がにあなたのAJAXの成功のパラメータを変更し

:あなたは以前にやっていた

{ 
    ..., 
    success: successCallback, 
    error: errorCallback 
} 

方法は直接関数を実行しました。 関数の参照を渡して実行しません。

button.addEventListener('click', myCallback); 

、あなたがsuccesserror機能を渡す必要はありませ

button.addEventListener('click', myCallback()); 
+1

素晴らしい作品ですが、ボーナスとして意味があります! :) –

+0

@RatherNotsay :) –

1

successCallbackを呼び出したときにエラーが指摘するように、データは定義されていません。矢印関数表記と関数宣言の間に大きな違いはありません

let api = (function() { 
    return { 
     getObjectDetails(id, successCallback, errorCallback) { 
      $.ajax({ 
       type: 'GET', 
       url: app.apiServerRoot + '/api/getobjectdetails/?Id=' + id, 
       beforeSend: function(xhr) { 
        xhr.setRequestHeader("Authorization", "Bearer " + user.authToken); 
       }, 
       success: (data, s, xhrdata) => successCallback(data,s,xhrdata), 
       error: (e) => errorCallback(e) 
      }); 
     } 
    } 
})(); 

はこれを試してみてください。

あなたはこれらのいずれかを書くことができます:

success: (data, s, xhrdata) => successCallback(data, s, xhrdata) 

success: (data, s, xhrdata) => { 
    successCallback(data, s, xhrdata); 
} 

success: function(data, s, xhrdata) { 
    successCallback(data, s, xhrdata); 
} 
+0

これは少し説明できますか?私は矢印機能を全く持っていないし、何が起こっているのか理解したい。 –

+0

ありがとうございます。これはうまくいったが、もう一つの答えはより簡単だった。 –

+1

私は同意します。成功/エラーのパラメータとしてコールバックを直接渡す方が良い方法でしょう。 – Xeraqu

0

:あなたは、クリックイベントをバインドたとえば

は、あなたが参照を渡したいです。その関数を自分で呼び出すべきではありません。

関数の名前の後にかっこを入れると、関数の名前がす​​ぐに呼び出されます。あなたが書いたものの代わりに、それはそうでなければなりません:

let api = (function() { 
return { 
    getObjectDetails(id, successCallback, errorCallback) { 
     $.ajax({ 
      type: 'GET', 
      url: app.apiServerRoot + '/api/getobjectdetails/?Id=' + id, 
      beforeSend: function(xhr) { 
       xhr.setRequestHeader("Authorization", "Bearer " + user.authToken); 
      }, 
      success: function(data, s, xhrdata) { 
       successCallback(data,s,xhrdata); 
      }, 
      error: function(e) { 
       errorCallback(e); 
      } 
     }); 
    } 
} 
})();