为什么我的Ajax调用在第一次调用时返回null

时间:2016-06-24 12:38:21

标签: javascript jquery ajax

我有一个jQuery typeahead控件,用于显示可用学生列表。当用户键入更多字母时,列表会缩小。目前,当用户键入第一个字母时,它返回null。我一直在使用JavaScript回调函数来做到这一点。我一直在调试它,但我已经能够找出它为什么返回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 个答案:

答案 0 :(得分:0)

javascript中的Ajax调用是异步运行的,所以如果你想编写依赖于从调用中收到的数据的代码,你必须等待调用完成。确保这一点的唯一方法是将读取响应的代码放入回调函数(或由回调函数调用的函数)。

在你的情况下,这将是"成功" $ .ajax调用中定义的函数,或者当前设置为运行的回调函数。