0
    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="!";
                        }
                    });
                }
            });
        }
    });

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

4

2 回答 2

2

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

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

if (prod == labe) { 
  desc = "!";
  onDescChanged();
}
于 2013-03-01T18:24:39.227 回答
0

我假设您的代码正在尝试类似:

function foo() {
    var desc;
    $.ajax({
        ....
        success: function() {
            ...
            desc = "!";
        }
    });
    return desc; // this will return undefined, as success() hasn't completed
}

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

于 2013-03-01T18:29:41.417 回答