从AJAX响应设置的JavaScript变量在需要之后设置

时间:2015-04-15 03:41:47

标签: javascript jquery ajax

我的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行,所以我希望这是我可以先描述的东西而不会过多地进行演示,但是如果必须的话,我会这样做!

感谢任何见解或帮助

0 个答案:

没有答案