Как заставить правильный порядок с помощью javascript

Хорошо, поэтому у меня есть этот JavaScript/jQuery

$('.next').click(function(e){
 e.preventDefault();
 var table = $('table.active');
 var form = table.find('form');
 form.submit();
 window.location.href = '/some/location';
});

Проблема в том, что в некоторых браузерах Safari являясь одним из них, не получает form.submit().

Я предполагаю, что это асинхронный запрос и никогда не получает шанс сделать этот вызов.

Есть идеи, как это сделать. Я попробовал следующее

form.submit(function(){
 window.location.href = '/some/location';
 });

Но это не сработало

5 ответов

Вам нужно что-то вроде

$(function() {
 $('.next').click(function(e){
 e.preventDefault();
 var table = $('table.active');
 var form = table.find('form');
 $.post(form.attr("action"),function() {
 window.location.href = '/some/location';
 });
 });
});

с параметрами try

$.post(form.attr("action"),form.serializeArray(),function() {


Это будет вести себя по-разному в разных браузерах, которые позволят передать форму для переопределения, если window.location разрешено прервать этот запрос.

Если вы намерены представить содержимое формы как ajax, вам нужно собрать поля формы в объект, который затем можно отправить с помощью ajax и в запросе ajax вы отправите этот объект на сервер, а при успешном перенаправлении на страницу ты хочешь.

$.ajax({
 type: "POST",
 url: "some.php",
 data: stringifyedData
}).done(function ( data ) {
 window.location = "/some/location";
});


Вы можете что-то сделать через AJAX.

JavaScript/JQuery:

$(document).ready( function() {
 /* attach a submit handler to the form */
 $("#formID").submit(function(event) {

 /* stop form from submitting normally */
 event.preventDefault();

 /* get some values from elements on the page: */
 var $form = $( this ),
 term = $form.find( 'input[name="s"]' ).val(),
 url = $form.attr( 'action' );

 /* Send the data using post */
 var posting = $.post( url, { s: term } );

 /* Redirect the client */
 posting.done(function( data ) {
 window.location.href = '/some/location';
 });
 });


Вам просто нужно отложить установку location.href, чтобы запрос Ajax сначала отправлялся браузером. Вам не нужно ждать ответа:

setTimeout(function(){
 window.location.href = '/some/location';
}, 1);


Вам нужно будет сделать перенаправление в /some/location на странице, к которой идет аргумент action формы.

licensed under cc by-sa 3.0 with attribution.