Jquery синхронные проблемы

Итак, у меня есть основная функция, которая получает 2 канала. Моя проблема в том, что функция, работающая в асинхронном режиме, пропускает функцию оповещения (для тестирования) перед тем, как выполнить функцию для получения обоих каналов. Я уверен, что есть жизнеспособное решение, но оно заставляет меня чесать голову. вот сценарий Я очень признателен за помощь, спасибо!

function getFeeds(){
    jQuery.getFeed({
        url: 'proxy.php?url='+feed1,
        success: function(feed) {       

            for(var i = 0; i < feed.items.length && i < 10; i++) {

                var item = feed.items[i];

                s_string += '<div class = \"cont_div a'+i+'\"><h2>'
             /*   + '<a href="'
                + item.link
                + '">'*/
                + item.title
                /*+ '</a>'*/
                + '</h2></div>';

               /* html += '<div class="updated">'
                + item.updated
                + '</div>';

                html += '<div>'
                + item.description
                + '</div>';*/
            }

        }  
    });    
    jQuery.getFeed({
        url: 'proxy.php?url='+feed2,
        success: function(feed) {       

            for(var i = 0; i < feed.items.length && i < 10; i++) {

                var item = feed.items[i];

                s_string += '<div class = \"cont_div a'+i+'\"><h2>'
             /*   + '<a href="'
                + item.link
                + '">'*/
                + item.title
                /*+ '</a>'*/
                + '</h2></div>';

               /* html += '<div class="updated">'
                + item.updated
                + '</div>';

                html += '<div>'
                + item.description
                + '</div>';*/
            }


       } 
    });    
alert(s_string);
} 

1 ответ

Решение

Вы должны обрабатывать два запроса как отдельные сроки:

  1. создать две переменные для показателей успеха
  2. поставить проверку внутри колбэков
  3. какой запрос завершается последним, будет выполняться

Код выглядит примерно так:

function getFeeds(finished_callback) {
    var feed_a_finished = false,
        feed_b_finished = false,
        s_string = "";

    jQuery.getFeed( {
        url: 'proxy.php?url='+feed1,
        success: function(feed) {
            /* Your code ... */
            feed_a_finished = true;
            if (feed_a_finished && feed_b_finished) {
                finished_callback();
            }
        }  
    });
    feed_b_finished = false; 
    jQuery.getFeed({
        url: 'proxy.php?url='+feed2,
        success: function(feed) {       
            /* Your code ... */
            feed_b_finished = true;
            if (feed_a_finished && feed_b_finished) {
                finished_callback();
            }
        } 
    });
}

getFeeds(function () {
    alert(s_string);
});
Другие вопросы по тегам