Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未定义变量的问题_Javascript_Jquery_Function_Variables - Fatal编程技术网

Javascript 未定义变量的问题

Javascript 未定义变量的问题,javascript,jquery,function,variables,Javascript,Jquery,Function,Variables,我正在尝试运行以下命令: function loadApp() { var content = getContent("content.xml"); createMap(content); } function getContent(file) { $.ajax({ type: "GET", url: file, dataType: "xml", success: parseXml });

我正在尝试运行以下命令:

function loadApp() {
    var content = getContent("content.xml");
    createMap(content);
}

function getContent(file) {
    $.ajax({
        type: "GET",
        url: file,
        dataType: "xml",
        success: parseXml
    });

    function parseXml(xml) {
        var content = [];
        $("element", xml).each(function () {
            var var1 = $(this).children("var1").text(),
            content.push(var1)
        });

        return content;
    }
}

    function createMap(content) {
        alert(content);
    }
但当我打开页面时,警报会显示我的
内容
变量未定义
getContent()
工作正常,当我删除
createMap(content)时,会给
content
一个字符串值来自
loadApp()
。似乎
createMap()
getContent()
之前运行,这就是变量尚未定义的原因,知道为什么会发生这种情况以及如何解决它吗


提前感谢。

我假设
getContent()
进行异步AJAX调用。如果是,则在收到响应之前调用
createMap()
函数

如果是这种情况,我会修改
getContent()
函数,这样您就可以将
createMap()
函数传递给它,并在正确的时间调用它

function loadApp() {
    getContent( "content.xml", createMap );
}

function getContent( file, fn ) {
    $.ajax({
        type: "GET",
        url: file,
        dataType: "xml",
        success: parseXml
    });

    function parseXml(xml) {
        var content = [];
        $("element", xml).each(function () {
            var var1 = $(this).children("var1").text(),
            content.push(var1)
        });
          // Call "fn" instead of returning "content"
        fn( content );
    }
}

也许您应该向我们展示getContent()方法。也许它有一个回调。我想你的
getContent
函数做了一个异步操作(比如Ajax请求)…谢谢你的工作!但是有没有其他方法可以让我的函数仅在第一个函数完成并返回值时运行?@VerizonW:唯一的方法是将ajax请求设置为
async:false
,这通常是个坏主意。最终,您的
getContent
函数将在AJAX请求返回之前退出很久。因此,任何依赖于AJAX响应的代码都必须等到收到响应后才能运行。如果
createMap
位于
getContent
可访问的范围内,则无需传递函数,只需在
parseXML
中直接调用即可。但是在
loadApp()
中调用它是行不通的。