Javascript函数总是返回错误的值,尽管变量之前具有正确的值

时间:2012-04-05 09:00:30

标签: javascript

我有一个函数,它返回xml文件中属性的最高值

返回的值总是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
}

2 个答案:

答案 0 :(得分:6)

因为这是一个ajax请求,所以在success方法中的行之前命中最后两行。

除非您设置async: false

,否则无法从ajax请求返回值

您需要通过成功回调处理该值,而不是尝试返回它。

答案 1 :(得分:2)

AJAX为asynchronous,因此在调用$.ajax()之前不会等待console.log()调用,因此错误的值。所以你在doesnt know what happens inside of it

的意义上是正确的

要解决此问题,您可以将函数逻辑的其余部分放在success调用的$.ajax属性中,也可以设置async: false,但要注意,您的浏览器会“冻结” $.ajax()发生时有点