вложенный анализ ajax и xml - PullRequest
       17

вложенный анализ ajax и xml

0 голосов
/ 06 сентября 2011

При выполнении вложенного вызова Ajax, как передать индекс первого цикла во второй цикл?

Пример:

$(document).ready(function() {
    $.ajax({
        type: "GET",
        url: "url1",
        dataType: "xml",
        async: false,
        success: parseXml
    });
});

function parseXml (xml){

    $title = $(xml).find("title");
    //find every Tutorial and print the author
    $title.each(function(index)
    {
        //alert($(this).text());
        if (index != 0) {
            $("#container").append('<div id=' + index + '></div>');
            $('#' + index).text($(this).text());
            $.ajax({
                type: "GET",
                url: $(xml).find('content').eq(index).attr('src'),
                dataType: "xml",
                async: false,
                success: parseInnerXml(index3)
            });
        }
    });

}

function innerXml(xml2, index3)
{
    // is this how i get the value of index3
    // also will xml2 contain the new xml doc ..
}

1 Ответ

0 голосов
/ 13 сентября 2011

Я согласен с @ alpha123, что вы должны сделать $title локальным для функции parseXml, используя вместо этого var $title.

Я предполагаю, что index3 является опечаткой, и выиспользовать index в функции parseInnerXml.Таким образом, вы должны создать замыкание , которое захватывает значение index.Функция createParseInnerXmlCallback сделает это.

function parseXml (xml){
    function createParseInnerXmlCallback(index) {
        return function () {
            parseInnerXml(index);
        }
    }

    var $title = $(xml).find("title");

    //find every Tutorial and print the author
    $title.each(function(index)
    {
        //alert($(this).text());
        if (index != 0) {
            $("#container").append('<div id=' + index + '></div>');
            $('#' + index).text($(this).text());
            $.ajax({
                type: "GET",
                url: $(xml).find('content').eq(index).attr('src'),
                dataType: "xml",
                async: false,
                success: createParseInnerXmlCallback(index)
            });
        }
    });
}
...