2012-01-07 2 views
2

Что я должен использовать в html и jQuery, если я хочу, чтобы форма отправила (а) выполнение определенного файла php (url-a); (b) перенаправить на другой. (url-b)Отправить форму с ajax, но перенаправить на другую страницу

В настоящее время я реализовал плагин jquery form. http://jquery.malsup.com/form/#getting-started

Как так:

стадии а. включены скрипты jquery и form plugin;

уровень b. в html, в элементе формы:

 <form action="url-a.php"> 
      <!--form code inserted here including input elements, etc and submit--> 
     </form> 

стадия c. в JS, внутри document ready:

 $('#form').ajaxForm(function() { 
      $.post("url-a.php", {a: a, b: b}); 
     }); 

Если один из этих URL-адрес ссылки можно изменить? предположим, что url-a является тем, о котором должен заботиться ajax, и я хочу перенаправить на url-b ..

Спасибо!

ответ

1

, если вы хотите, чтобы страница перенаправления, то почему вы хотите, чтобы представить ajaxly любой, как в обработчике успеха можно перенаправить на страницу

$.post("url-a.php", {a: a, b: b},function(){ 
    window.location.href="/page/to/redirect.php"; 
}); 
+0

, потому что это то, что мои потребности приложения, мне нужно перенаправлять произойти до Аякса возвращается. поэтому это решение не будет работать. (ожидается, что ajax будет больше, чем несколько секунд) –

+0

, почему вы хотите перенаправить и затем отправить форму, для этого вам придется сериализовать форму и перенести ее на следующую страницу, а затем отправить, но это не способ сделать это, если сообщение формы не удается из-за многочисленных причин – Rafay

+0

я не хочу, чтобы сначала сначала перенаправлять ИЛИ сначала отправлять, они оба одинаковы для меня, дело в том, что я не хочу ждать функции успеха из ajax submit. Это связано с тем, что то, что делает этот php-файл с результатами отправки, очень сложно и может занимать от нескольких минут до нескольких часов. Поэтому я хочу, чтобы пользователь не беспокоился об этом. Он действительно подчинился, и он отправился куда-то в другом месте, независимо от того, что эта страница php делает в фоновом режиме, в том случае, если она будет в контексте текущего браузера. –

0

в «полной» функции $.post(..) вы должны изменить расположение браузера. Вы не можете использовать перенаправление на стороне сервера с помощью ajax.

$.post("url-a.php", {a: a, b: b},function(){ 
     window.location.href="/url-b.php"; 
}); 

Если вы хотите перенаправить до завершения ajax, это возможно, но сложно. Например, я не знаю, как это сделать на PHP. Дело в том, что если вы перенаправляете сразу (снова нужно сделать через javascript), тогда запрос прерывается от клиента. И если запрос прерван, сервер также прервет его. Иногда можно запустить новый поток на сервере, который отделен от потока запросов, но если запрос будет прерван до того, как он полностью достигнет сервера, все будет работать.

В общем, вы не должны этого делать - это неправильный подход. Либо не перенаправляйте, либо не запускайте запрос ajax на предыдущей странице - запустите его, как только загрузится новая страница.

Обновление: я видел, что вам нужен ваш запрос ajax для работы в течение часа - этого не произойдет - браузер отключится. После того, как вы подтвердите, что нужен один час, check this для асинхронных задач php. Вы можете запустить его из $(document).ready(function() {..}); 2-й странице

+0

Я хочу, чтобы переадресация произошла сразу же, и ajax просто продолжал работать и делать свое дело на некоторое время ... –

+0

см. Мое обновление ... – Bozho

+0

Хорошо, я пытаюсь использовать этот последний подход, который вы упомянули, - запустите ajax как как только новая страница загрузится. но он не работает ... где я должен поставить jqury 'post'? под что? просто doc при загрузке? и как передать переменные? Я использовал сообщение, а затем снова передал их в js, но это кажется лишним ... спасибо! –

3
$('#form').ajaxForm(function() { 
    $.post("url-a.php", {a: a, b: b}); 
    window.location.href="/url-b.php"; 
}); 
Смежные вопросы