2009-10-08 3 views
0

У меня есть сценарий, который создает jQuery AJAX сообщение, а затем должен перенаправить на другую страницу. Проблема в том, что она иногда перенаправляется до того, как сообщение завершается. Кажется, есть несколько решений, но я не могу заставить их работать. Спасибо за вашу помощь! Вот мой код:jquery post когда сделано

$.post("cart.php", { 'products[]':postvalues }, function(data) { }); 
location.href="index.php"; 

ответ

5

Вы должны положить location.href внутри функции обратного вызова.

$.post("cart.php", { 'products[]':postvalues }, function(data, status) { 
    // if you don't want to redirect if it doesn't work, you can check if status == 'success' 
    location.href = "index.php"; 
}); 

Смотрите jQuery.post документы для получения дополнительной информации.

Хотя, я должен спросить: если вы собираетесь перенаправить в любом случае, зачем это делать с помощью ajax?

Есть ли причина, по которой вы не хотите просто отправить форму обычным способом? Если нет, скорее всего, вы должны пойти по этому пути.

+0

Это было бы просто, однако сообщение было динамическим и выполнялось в зависимости от того, что выбирает пользователь, если пользователь выбирает некоторые элементы. Он действует как флажок, но делается с изображениями. – Scott

+0

Мне пришлось изменить 'href' с' .' на '#', чтобы заставить его работать. – dhill

1

ли перенаправлять в функции обратного вызова на успех:

$.post("cart.php", { 'products[]':postvalues }, function(data, textStatus) { 
    if (textStatus == "success") { 
     location.href="index.php"; 
    } 
}); 

См jQuery.post для других статусов для осуществления дальнейшей обработки ошибок.

1

Ваша проблема заключается в том, что ваше изменение местоположения не дожидаясь завершения вашего действия по почте ... поскольку пост использует Ajax, он передает управление следующей строке после отправки запроса.

Чтобы исправить это, выполните следующие действия:

$.post("cart.php", { 'products[]':postvalues }, function(data) { 
// do stuff with data 
location.href="index.php"; 
}); 
0

если вы хотите пойти на ту же страницу, вы можете сделать window.location.reload(), если доу хотят злоупотреблять JS вы можете использовать нагрузку один div, только контент

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