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="!"
中看到的那样,但它返回undefined。有没有办法让变量全局或什么?或其他一些方式来访问它? ...
哦,所有这些代码都在函数内部。
答案 0 :(得分:2)
在这种特殊情况下,问题不在于desc
变量的范围。您在desc
回调中操作的success
变量与在ajax调用之前声明的变量相同。
这里的问题是时机。 success
方法不会在进行ajax调用的同时执行。它在ajax调用完成后执行一段时间。只有在那一点上写入desc
的值。必须从设置desc
值的位置调用处理desc
值的任何代码
if (prod == labe) {
desc = "!";
onDescChanged();
}
答案 1 :(得分:0)
我认为您的代码尝试的是:
function foo() {
var desc;
$.ajax({
....
success: function() {
...
desc = "!";
}
});
return desc; // this will return undefined, as success() hasn't completed
}
要解决此问题,请使用JaredPar的答案中的回调函数。