2012-04-05 70 views
2

之前有正确的价值观我有一个返回XML文件JavaScript函数总是返回错误的值,虽然变量

返回的值属性的最高值的函数始终为0,所以我觉得下的价值JQuery函数不知道里面发生了什么。下面是函数:

function findHighestValue(url,attr){ 
var highestValue = 0; 
$.ajax({ 
    type: "GET", 
    url: url, 
    dataType: "xml", 
    success: function(xml) { 
     $(xml).find("achievement").each(function(){ 
      var value = $(this).find(attr).text(); 
      value = value*1;//typecast 
      console.log("value: "+value);//shows correct value 
      console.log("highestValue in ajax: "+highestValue);//shows correct value 
      if (value >= highestValue){ 
       highestValue = value; 
       console.log("Value higher highesValue detected!");//works as intended 
      } 

     }); 
    } 
}); 
console.log("Highest Value: "+highestValue);// is 0 again 
return highestValue;//always returns 0 
} 

回答

6

由于这是一个ajax请求,最后两行命中成功方法中的行之前。

,除非你设置async: false

您需要处理通过成功回调的价值,而不是试图返回它不能从一个Ajax请求返回一个值。

+0

我吸取了教训,这是完全合理的。我将async设置为false,现在它按照原意工作。谢谢! – dan 2012-04-05 09:08:44

+0

@dan我不建议将async设置为false,但如果您的ajax请求需要很长时间,则会冻结浏览器。更好地使用回调函数来执行你的逻辑。 – 2012-04-05 09:12:53

+0

我同意,我会解决它。 – dan 2012-04-05 09:14:32

2

AJAX是asynchronous,这样就不会调用console.log(),因此错误值之前,等待您的通话$.ajax()。那么,你是正确的,即doesnt know what happens inside of it

为了解决这个问题,你可以把你的功能逻辑的其余内的$.ajax通话success属性或设置async: false,予以警告,虽然您的浏览器将“冻结”了一下当$.ajax()发生时

+0

感谢您的信息 – dan 2012-04-05 09:15:27