2

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
}
4

2 に答える 2

6

これは ajax リクエストであるため、成功メソッド内の行の前に最後の 2 行がヒットします。

設定しない限り、ajaxリクエストから値を返すことはできませんasync: false

値を返そうとするのではなく、成功のコールバックを介して値を処理する必要があります。

于 2012-04-05T09:03:00.970 に答える
2

AJAX はであるため、 を呼び出す前に呼び出しをasynchronous待機しないため、値が間違っています。だからあなたはその意味で正しい$.ajax()console.log()doesnt know what happens inside of it

これに取り組むには、関数の残りのロジックをcall または setsuccessのプロパティ内に配置します。ただし、発生するとブラウザが少し「フリーズ」することに注意してください。$.ajaxasync: false$.ajax()

于 2012-04-05T09:02:21.023 に答える