Jquery привязывается к ссылке, выполняет некоторую post jquery, затем загружает ссылку

63
5

есть ли чистый способ привязки сообщения jquery по ссылке и после того, как сообщение выполнено, чтобы загрузить ссылку, как это должно быть сделано нормально?

вот мой код:

$("a").bind('click', function(e){
// disable click while we make a post request
e.preventDefault();

// make post request
$.post('/blablabla/', { "datas" : mydatas } );
});

пока я отключу клик, чтобы позволить моему скрипту делать POST, но я хочу, чтобы ссылка вышла на целевую страницу после вызова и успешного выполнения POST. Мне кажется, мне нужен обратный вызов, но он не может найти хороший способ его достижения.

Спасибо заранее,

спросил(а) 2021-01-25T17:35:32+03:00 4 месяца, 3 недели назад
1
Решение
99

Добавьте функцию успеха в ваш .post вызов, который меняет window.location на href щелкнутой ссылки.

$( 'a' ).bind( 'click', function( e )
{
var url;

# disable click while we make a post request
e.preventDefault();

# get the url from the href attr
url = = $( this ).attr( 'href' );

# make post request
$.post(
'/blablabla/',
{
datas: mydatas
},
function()
{
# send browser to url
window.location = url;
}
);
} );

Если вы хотите, чтобы перенаправление .ajax() даже если POST не удалось, вы можете переключиться на использование .ajax() и использовать complete вариант:

$( 'a' ).bind( 'click', function( e )
{
var url;

# disable click while we make a post request
e.preventDefault();

# get the url from the href attr
url = = $( this ).attr( 'href' );

# make post request
$.ajax( {
url: '/blablabla/',
type: 'POST',
data: {
datas: mydatas
},
complete: function()
{
# send browser to url
window.location = url;
}
);
} );

ответил(а) 2021-01-25T17:35:32+03:00 4 месяца, 3 недели назад
45

Вы можете перенаправить на url href после возврата $.post.

$("a").bind('click', function(e){

# disable click while we make a post request
e.preventDefault();
var url = $(this).attr('href');

# make post request
$.post('/blablabla/', { "datas" : mydatas }, function(){
window.location = url;
});

});

ответил(а) 2021-01-25T17:35:32+03:00 4 месяца, 3 недели назад
45

$("a").bind('click', function(e){
# disable click while we make a post request
e.preventDefault();

# Save the link url
var url = $(this).attr('href');

# make post request
$.post('/blablabla/', { "datas" : mydatas }, function() {
# Post successful
document.location(url);
} );
});

Вы должны как-то предотвратить "двойные щелчки".

ответил(а) 2021-01-25T17:35:32+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема