Jquery синхронные проблемы - PullRequest
0 голосов
/ 08 июня 2011

Хорошо, поэтому у меня есть базовая функция, которая получает 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 голос
/ 08 июня 2011

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

  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);
});
...