Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.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_Xml Parsing_Global Variables - Fatal编程技术网

Javascript";“全球”;可变问题

Javascript";“全球”;可变问题,javascript,jquery,xml-parsing,global-variables,Javascript,Jquery,Xml Parsing,Global Variables,我在访问desc变量时遇到一些问题。。。我想操纵它的值,正如您在desc=“!”中看到的,但它返回未定义的值。难道没有办法使变量成为全局的或其他的吗?或者以其他方式访问它。。。 哦,所有这些代码都在一个函数中。在这种特殊情况下,问题不在于desc变量的作用域。在success回调中操作的desc变量与ajax调用之前声明的变量相同 这里的问题是时机。success方法不会在进行ajax调用的同时执行。它会在ajax调用完成后执行一段时间。只有在该点上,才会将值写入desc。处理desc值的任何代

我在访问
desc
变量时遇到一些问题。。。我想操纵它的值,正如您在
desc=“!”
中看到的,但它返回未定义的值。难道没有办法使变量成为全局的或其他的吗?或者以其他方式访问它。。。
哦,所有这些代码都在一个函数中。

在这种特殊情况下,问题不在于
desc
变量的作用域。在
success
回调中操作的
desc
变量与ajax调用之前声明的变量相同

这里的问题是时机。
success
方法不会在进行ajax调用的同时执行。它会在ajax调用完成后执行一段时间。只有在该点上,才会将值写入
desc
。处理
desc
值的任何代码必须从设置
desc
值的点调用

    var desc;
    $.ajax({
        url: "data/step2.xml",
        dataType: "xml",
        success: function(data){
            $(data).find('date').each(function(){
                var day = $(this).find('day').text();
                var date = $("#txtDate").datepicker("getDate");
                date = (date.getDate()+"-"+date.getMonth()+1+"-"+date.getFullYear());
                if (day==date){
                    $(this).find('availability').each(function(){
                        var prod = $(this).find('product').text();
                        var time = $(this).find('starttime').text();
                        if (prod==label){
                            desc="!";
                        }
                    });
                }
            });
        }
    });

我假设您的代码正在尝试以下操作:

if (prod == labe) { 
  desc = "!";
  onDescChanged();
}

要解决这个问题,请使用JaredPar回答中的回调函数。

$。默认情况下,ajax是异步的。看起来您正试图在ajax调用完成之前访问
desc
。首先,您确定您的代码运行到
desc=“!”
?您说“所有代码都在函数中…”哪个函数?这一切都在
success
函数中吗?@techfoobar:但是
desc=“1”
success:
处理程序中,因此根据定义,在ajax结果出现之前,分配不会发生。是的,请使用console.logOh检查,明白了。非常感谢。我试试别的:)
function foo() {
    var desc;
    $.ajax({
        ....
        success: function() {
            ...
            desc = "!";
        }
    });
    return desc; // this will return undefined, as success() hasn't completed
}