我有一个函数,它返回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
}
答案 0 :(得分:6)
因为这是一个ajax请求,所以在success方法中的行之前命中最后两行。
除非您设置async: false
您需要通过成功回调处理该值,而不是尝试返回它。
答案 1 :(得分:2)
AJAX为asynchronous
,因此在调用$.ajax()
之前不会等待console.log()
调用,因此错误的值。所以你在doesnt know what happens inside of it
要解决此问题,您可以将函数逻辑的其余部分放在success
调用的$.ajax
属性中,也可以设置async: false
,但要注意,您的浏览器会“冻结” $.ajax()
发生时有点