我的JavaScript应用程序有一个奇怪的结果。
我有一些被调用的函数,这些函数又执行一个AJAX请求,该请求的结果应该被设置为一个变量,然后传递给下一个函数。
问题是发出了AJAX请求,然后代码继续向前移动而不等待AJAX的响应首先设置变量!
以下是事情的流程......
在DOM加载并准备就绪后....
projectTaskModal.task.openTaskModalFromUrlHash(hashTaskId);
函数被称为
openTaskModalFromUrlHash(hashTaskId)
var taskJsonData = projectTaskModal.task.loadTaskAjaxRequest(taskId);
内部正在运行
然后我打印var taskJsonData
的值undefined
var taskJsonData
是根据loadTaskAjaxRequest(taskId)
现在在loadTaskAjaxRequest(taskId)
内部进行了这个AJAX调用......
// Request Task Record using AJAX Request to Server
$.ajax({
type: 'GET',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
url: projectTaskModal.cache.getTaskRecordUrlEndpoint,
data: {
action: 'load-task-record',
task_id: projectTaskModal.cache.taskId
},
success: function(data) {
// Parse JSON data var
var taskRecordJson = data;
var task_record = taskRecordJson.task_record;
// Return Task Record Object
console.log('task_record var loaded from AJAX SUUCCESS...',task_record);
projectTaskModal.cache.taskData = task_record;
console.log('projectTaskModal.cache.taskData', projectTaskModal.cache.taskData);
return task_record;
}
});
您可以看到我的AJAX请求返回变量task_record
因此task_record
应该在上面的第3步中返回到var taskJsonData
,但它是undefined
!
回到我的AJAX请求,在那里我打印返回控制台的内容,它打印出正确的数据。
所以看起来由于某种原因,我顶部的代码进行了AJAX调用,但是继续执行而不等待AJAX响应! 所以似乎数据已设置,只需在需要后设置!
现在我正在使用一个名为MockAjax
的库拦截我的AJAX cals并返回Mock数据,但我从未遇到过这个问题,所以我不知道为什么它在没有等待我的AJAX结果的情况下进行处理先退回来!
如果需要,我会制作一个dmeo,现在我的应用程序大约有2,000行,所以我希望这是我可以先描述的东西而不会过多地进行演示,但是如果必须的话,我会这样做!
感谢任何见解或帮助