Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.12.2013, 12:33
Интересующийся
Отправить личное сообщение для vas88811 Посмотреть профиль Найти все сообщения от vas88811
 
Регистрация: 20.12.2013
Сообщений: 22

Переход на 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";

}



При срабатывании функции сразу происходит переход, но данные в базу не заносятся(или не успевают занестись). Как сделать, чтобы сначала данные занеслись, цикл сработал, а потом произошел переход?

Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 20.12.2013, 12:45
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 16.12.2011
Сообщений: 4,415

Сообщение от vas88811
function(data) { }
как думаете callback функция придумана для красоты?
function(data) { }

пока эта функция не вызовется данные не могут быть занесены, как только вызовутся все callback тогда можно делать переход.
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #3 (permalink)  
Старый 20.12.2013, 13:37
Новичок на форуме
Отправить личное сообщение для ANDRUkomod Посмотреть профиль Найти все сообщения от ANDRUkomod
 
Регистрация: 08.09.2013
Сообщений: 9

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.
Ответить с цитированием
  #4 (permalink)  
Старый 20.12.2013, 13:44
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 13,794

Сообщение от vas88811
Нужно, чтобы четко при окончании цикла и занесении всех данныx в базу срабатывал код перехода на другую страницу
Как вариант...
Делать тот переход в калбек-функции последней итерации цикла.
Ответить с цитированием
  #5 (permalink)  
Старый 20.12.2013, 13:49
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от ksa
Делать тот переход в калбек-функции последней итерации цикла.
А кто даст гарантию что последний запрос завершится в последнюю очередь?

Есть такая штука как $.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/
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 20.12.2013, 13:58
Новичок на форуме
Отправить личное сообщение для ANDRUkomod Посмотреть профиль Найти все сообщения от ANDRUkomod
 
Регистрация: 08.09.2013
Сообщений: 9

код на скорую руку могут быть ошибки

Замените эту часть
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);
Ответить с цитированием
  #7 (permalink)  
Старый 20.12.2013, 14:02
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

ANDRUkomod, стоило отметить, что в твоем варианте запросы идут последовательно, а не параллельно, так что это замедляет работу скрипта.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #8 (permalink)  
Старый 20.12.2013, 14:03
Новичок на форуме
Отправить личное сообщение для ANDRUkomod Посмотреть профиль Найти все сообщения от ANDRUkomod
 
Регистрация: 08.09.2013
Сообщений: 9

Согласен, но в условии этого не было, а выполнено будет как задумывал автор.
Ответить с цитированием
  #9 (permalink)  
Старый 20.12.2013, 14:29
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 13,794

Сообщение от danik.js
А кто даст гарантию что последний запрос завершится в последнюю очередь?
Никто.
В этом случае и цикл нужно не так организовывать... Либо полученые ответы считать...
Ответить с цитированием
  #10 (permalink)  
Старый 20.12.2013, 14:42
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от ksa
Либо полученые ответы считать...
Мой вариант смотрел? Ждем пока автор проверит его..
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывести изображение после ввода URL без перезагрузки страницы Delfiniys Элементы интерфейса 5 18.10.2013 10:41
Переход на страницу после окончания проигрывания bohdantheone Общие вопросы Javascript 7 03.12.2011 04:59
Водяной знак на fancybox bobrina Общие вопросы Javascript 1 03.06.2011 20:11
переход на выбор сайт через поле ввода url (как убрать функцию "открыть все") ? rashid86 Элементы интерфейса 1 31.03.2011 13:54
Узнать url после перенаправления ipevgeny AJAX и COMET 0 04.11.2009 23:18