我有一个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.
答案 0 :(得分:0)
javascript中的Ajax调用是异步运行的,所以如果你想编写依赖于从调用中收到的数据的代码,你必须等待调用完成。确保这一点的唯一方法是将读取响应的代码放入回调函数(或由回调函数调用的函数)。
在你的情况下,这将是"成功" $ .ajax调用中定义的函数,或者当前设置为运行的回调函数。