2014-06-24 7 views
1

меня это (попытка) функция долго опросаLong опрос вызывает максимальный размер стека вызовов превысил

Я хочу вызвать эту функцию в определенное время, а затем сделать длительную работу опроса до тех пор, как галерея имеет updating класс, галерея в данном случае является $("... ")

function pollGallery(gallery){ 
    if (gallery.hasClass("updating")){ 
     var url = gallery.data("base") + "/refresh"; 
     $.ajax({ url: url, dataType: "script", complete: pollGallery(gallery), timeout: 30000 }); 
    } 
} 

Когда я запускаю это я получаю Maximum call stack size exceeded и из журналов, кажется, как будто это не вызывайте Аякс или тайм-аут не работает ..

ответ

3

Ваш код - n ot передавая функцию обратного вызова в complete, она просто вызывает функцию рекурсивно бесконечно.

$.ajax({ url: url, dataType: "script", complete: function() { 
     pollGallery(gallery); 
    }, timeout: 30000 }); 

complete ожидает функции будет принята. К complete: pollGallery(gallery) вы сразу вызываете pollGallery(gallery) и пытаетесь присвоить его возвращаемое значение опции complete, тем самым застревая в бесконечном цикле рекурсии.

+0

ах спасибо! подумал, что это можно отметить как обозначение onclick. Благодаря! –

+0

@NickGinanto yep, точно. ';)' Обратный шаблон один и тот же, вы должны передать функцию, которая будет выполняться, когда произойдет определенное событие (например, полученный сетевой ответ, пользователь нажал на элемент). –

+0

Я обвиняю этот http://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery –

Смежные вопросы