2

我有一个函数可以返回 xml 文件中属性的最大值

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

2 回答 2

6

因为它是一个 ajax 请求,所以最后两行在成功方法内的行之前被命中。

除非您设置,否则不能从 ajax 请求返回值async: false

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

于 2012-04-05T09:03:00.970 回答
2

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

为了解决这个问题,您可以将函数的其余逻辑放在您的call 或 set的success属性中,尽管您的浏览器会在发生时“冻结”一点$.ajaxasync: false$.ajax()

于 2012-04-05T09:02:21.023 回答