2016-06-24 16 views
0

私は利用可能な生徒のリストを表示するために使用しているjQueryの先読み制御を持っています。ユーザーがより多くの文字を入力すると、リストが絞り込まれます。現在、ユーザーが最初の文字を入力するとnullが返されます。私はJavaScriptのコールバック関数を使用してこれを行ってきました。私はそれをデバッグしてきましたが、なぜそれがnullを返すのか理解できました。あなたの助けに感謝します。私のAjaxコールが最初のコールでnullを返す理由

API呼び出しとJavaScriptファイル:あなたはコールバックから受信したデータに依存しているコードを書きたい場合は、あなたがのために待たなければならないので、

var api = (function (window, document, $, undefined) { 
    'use strict'; 
    var currentResult; 
    var CallAPI = function (obj, callback) { 
      if (typeof (callback) === 'function') { 
       $.ajax({ 
        url   : obj.url, 
        method  : obj.method, 
        dataType : obj.dataType, 
        contentType : obj.contentType, 
        data  : obj.data, 
        cache  : false, 
        success  : function (result) { 
            callback.call(this, result); 
        }, 
        error: function (jqXHR, textState, errorThrown) { 
         return ('An error occur. ' + jqXHR.responseText); 
         } 
       }) 
      } 
     }; 

    var Service = function (obj) { 
     CallAPI(obj, function (result) { 
      currentResult = result; 
     }); 
      return currentResult; 
     } 

     window.Service = Service; 

     return { 
      Service: Service 
     } 

})(window, document, jQuery); 




var students = api.Service(obj); 
console.log(students); //null when the first letter is typed. Then, it started to return more data. 
+1

非同期呼び出しから戻ることはできません – epascarello

+1

非同期AJAX呼び出しを行い、呼び出しが完了した後にのみデータを利用できます。したがって、AJAX呼び出しが終了する前に 'students'を記録している場合、' null'になります。 '$ .ajax({})。done(function(){});'を使うと、呼び出しが終了したときに何かを実行できます。 –

答えて

0

Ajaxは、非同期JavaScriptの実行で呼び出します完了するために呼び出します。そのことを確認する唯一の方法は、応答を読み取るコードをコールバック関数(またはコールバック関数によって呼び出される関数)に入れることです。

あなたのケースでは、あなたの$ .ajax呼び出しで定義された "成功"関数か、現在実行するように設定されているコールバックです。

関連する問題