Javascript-无法从嵌套函数访问本地作用域对象

Javascript-无法从嵌套函数访问本地作用域对象,javascript,jquery,ajax,function,local-variables,Javascript,Jquery,Ajax,Function,Local Variables,我试图让一个函数从另一个页面上的php文件中获取一个对象。我正在使用jQueryAjax函数来执行json抓取,它工作正常。问题是当我试图从函数返回该对象时 第一次记录对象时(从success函数中),它在控制台中是正确的,但是从函数getGantt()返回的对象记录为“未定义” 如何将此对象从函数中取出 我的代码: function getGantt(requestNumber){ var ganttObject; $.ajax({

我试图让一个函数从另一个页面上的php文件中获取一个对象。我正在使用jQueryAjax函数来执行json抓取,它工作正常。问题是当我试图从函数返回该对象时

第一次记录对象时(从success函数中),它在控制台中是正确的,但是从函数getGantt()返回的对象记录为“未定义”

如何将此对象从函数中取出

我的代码:

    function getGantt(requestNumber){
        var ganttObject;
        $.ajax({
               type: "POST",
               url: "get_gantt.php",
               data: {request_number: requestNumber},
               success: function(returnValue){
                     ganttObject = $.parseJSON(returnValue);
                    console.log(ganttObject); //this logs a correct object in the console

                }
        });
        return ganttObject;
    }

    $(function(){ //document ready function

        var requestNumber = $('#request_number').text();

        var ganttObject = getGantt(requestNumber);
        console.log(ganttObject); //this logs "undefined"

    }); //end document ready function

Ajax中的A是首字母缩略词的重要组成部分。异步JavaScript和XML是异步的

$.ajax({success:someFunction})
表示发出HTTP请求,当响应到达时,运行
someFunction

返回甘特图对象
在响应到达之前运行


您应该对某个函数中的数据执行任何您想执行的操作,而不要尝试将数据返回到调用函数。

我至少知道它为什么不返回数据。甘特图对象可能在同一范围内,但success函数最终是在来自XMLHTTP对象的readyState回调中运行的,因此它与GetGant函数位于不同的线程上。您能将$(function(){…code)作为成功函数的一部分吗?

AJAX中的A代表异步。因此调用立即返回,一旦完成,就会调用成功回调

因此,只需将代码更改为使用回调:

function getGantt(requestNumber, callback) {
    var ganttObject;
    $.ajax({
        type: "POST",
        dataType: 'json',
        url: "get_gantt.php",
        data: {request_number: requestNumber},
        success: function(returnValue){
            callback(returnValue);
        }
    });
}

$(function() {

    var requestNumber = $('#request_number').text();

    var ganttObject = getGantt(requestNumber, function(ganttObject) {
        console.log(ganttObject);
    });

});

顺便说一句,我还删除了这个parseJSON东西-将数据类型设置为json可以完成这项工作,而且不太脏。

在ajax回调设置GantObject之前返回一个变量。ajax是异步运行的,
getGantt
函数直到ajax过程完成后才获得值,这是在返回完成hap之后pened。您需要重新构造您的编程,以便(a)在成功函数中使用
returnValue
(b)将returnValue存储在全局/对象变量中,稍后可以访问该变量(导致所需的触发/等待过程出现问题)谢谢大家的回答;stackoverflow速度太快了。10分钟内有三个好答案!哈哈,我喜欢Ajax中的A是首字母缩略词的一个重要部分…下次将使用它。我可能应该补充一点,X并不重要;)谢谢,我已经完全忘记了ajax被从正常的流程中删除。这完全回答了我的问题。Dorward-不仅不重要,而且误导:)A很重要,但X不重要,因为现在大多数人使用JSON而不是XML