Переход на url после окончания цикла
Подскажите пожалуйста. Имеется следующая проблема.
Есть цикл с получением данных от контакта и отправкой их в базу. Нужно, чтобы четко при окончании цикла и занесении всех данныx в базу срабатывал код перехода на другую страницу. Такой код этого не делает: function perehod() { VK.api("wall.get", {filter:"others"}, function(dataFr) { var num = dataFr.response[0]; var chis = num/100; for (var c=0; c<chis; c++) { var cif = 100*c; VK.api("wall.get", {count:"100",offset:cif,filter:"others"}, function(data) { var profilesCount1 = data.response.length; // проверяем был ли ответ if(data.response) { // отправляем полученные данные пост запросом через ajax jquery: for (var i=0; i<profilesCount1; i++) { $.post("vbazy1.php", { id: data.response[i].to_id, to_id: data.response[i].date, from_id: data.response[i].from_id, text: data.response[i].text}, function(data) { } ); } } }); } }); document.location.href = "http://www.site.ru"; } При срабатывании функции сразу происходит переход, но данные в базу не заносятся(или не успевают занестись). Как сделать, чтобы сначала данные занеслись, цикл сработал, а потом произошел переход? Спасибо. |
Цитата:
function(data) { } пока эта функция не вызовется данные не могут быть занесены, как только вызовутся все callback тогда можно делать переход. |
ajax запросы через фреймворк jquey по умолчанию происходят асинхронно. и если написать что-то типо такого:
alert(1); jQuery.post(....,function(responce){ alert(2);}); alert(3); то в результате вы получите alert(1), alert(3), alert(2). Учитывайте это. Впишите "document.location.href = "http://www.site.ru";" во внутрь метода callback вашего ajax. Либо используйте Синхронные запросы, но это приостанавливает работу браузера и теряется весь смысл в технологии ajax. |
Цитата:
Делать тот переход в калбек-функции последней итерации цикла. |
Цитата:
Есть такая штука как $.when, никогда не пользовался, думаю она тут в самый раз: var deferreds = []; for (var i=0; i<profilesCount1; i++) { deferreds[i] = $.post("vbazy1.php", { id: data.response[i].to_id, to_id: data.response[i].date, from_id: data.response[i].from_id, text: data.response[i].text }); } $.when.apply($, deferreds).done(function() { location.href = "http://www.site.ru"; }); http://api.jquery.com/jQuery.when/ |
код на скорую руку могут быть ошибки
Замените эту часть for (var i=0; i<profilesCount1; i++) { $.post("vbazy1.php", { id: data.response[i].to_id, to_id: data.response[i].date, from_id: data.response[i].from_id, text: data.response[i].text}, function(data) { } ); } на что-то подобное function run(data,next,profilesCount1) { $.post("vbazy1.php", { id: data.data.response[next].to_id, to_id: data.response[next].date, from_id: data.response[next].from_id, text: data.response[next].text}, function(data) { if( next+1 < profilesCount1 ) run(data,next++,profilesCount1); else document.location.href = "http://www.site.ru"; } ); } run(data, 0, profilesCount1); |
ANDRUkomod, стоило отметить, что в твоем варианте запросы идут последовательно, а не параллельно, так что это замедляет работу скрипта.
|
Согласен, но в условии этого не было, а выполнено будет как задумывал автор.
|
Цитата:
В этом случае и цикл нужно не так организовывать... Либо полученые ответы считать... |
Цитата:
|
Часовой пояс GMT +3, время: 15:41. |