programing

jQuery ajax inside loop 문제

topblog 2023. 10. 15. 16:56
반응형

jQuery ajax inside loop 문제

이 js 루프 스크립트는 항상 jquery ajax funciton 안에 있는 ui_item의 마지막 값을 가져옵니다.A는 어떻게 각 반복의 정확한 값을 잡을 수 있습니까?

for (var i = 0; i <= split_files_cb_value_holder.length - 1; i++){
    var split_values = split_files_cb_value_holder[i].split(':');

    ui_item = split_files_cb_value_holder[i];

    $.ajax({
        type: "POST",
        url: "ds/index.php/playlist/check_folder",
        data: "component_type="+$('#component_type').val()+"&value="+split_values[1],
        success: function(msg)
        {
            console.log(ui_item); //ALWAYS GETS THE LAST VALUE
        },
        error: function()
        {
            alert("An error occured while updating. Try again in a while");
        }
    });

}

감사합니다!

문제는 익명 콜백 방식이 이를 포착한다는 점입니다.ui_item참조에 의한 변수변수가 하나밖에 없기 때문에 항상 변수의 마지막에 할당된 것을 가져옵니다.

당신은 그 내용물을 포장해야 합니다.for다음을 수행하는 함수를 순환합니다.i매개 변수로, 루프의 함수를 호출합니다.래퍼 함수를 호출할 때마다 별도의 변수가 생성되어 문제가 해결됩니다.

예를 들어,

function doCheck(i) {
    var split_values = split_files_cb_value_holder[i].split(':');

    var ui_item = split_files_cb_value_holder[i];

    $.ajax({
        type: "POST",
        url: "ds/index.php/playlist/check_folder",
        data: "component_type="+$('#component_type').val()+"&value="+split_values[1],
        success: function(msg)
        {
            console.log(ui_item); //Don't always get the last value
        },
        error: function()
        {
            alert("An error occured while updating. Try again in a while");
        }
    });
}

for (var i = 0; i < split_files_cb_value_holder.length; i++) 
    doCheck(i);

비동기식을 끄면 문제가 해결될 것 같습니다.내 말은 이것을 추가하라는 뜻입니다. 비동기:false

언급URL : https://stackoverflow.com/questions/2687679/jquery-ajax-inside-a-loop-problem

반응형