Ответ 1
Я предполагаю, что ответа нет, нет прямого пути. Для общей функции, которая добавляет эту возможность, см. Ответ Greg W.
У меня есть страница (page 1
), которая принимает почтовые запросы, делает некоторые вещи и отображает некоторые данные в конце.
С другой страницы (page 2
), я хочу перенаправить на page 1
при нажатии кнопки, конечно, посылая все соответствующие данные, необходимые page 1
через POST.
Я могу, конечно, использовать старый взломать невидимую форму на странице, набирая все данные, которые мне нужны с помощью jquery, сразу после того, как пользователь нажал кнопку и автоматически отправил().
Но это выглядит громоздким - гораздо лучше использовать синтаксис, похожий на $.post
, а не начинать манипулировать html. $.post
был бы идеальным, если бы он фактически перенаправлялся на страницу и не выполнял запрос асинхронно (я не могу просто перенаправить на page 1
после того, как сообщение ajaxy завершено, так как page 1
нужны данные для отображения чего-то).
Есть ли способ сделать то, что я хочу с jquery, или уродливые невидимые формы - единственный выход?
P.S
Я знаю, что есть другие запутанные способы достижения того, что я хочу, например, используя $.post
и просто поместив html-ответ на страницу, в которой мы сейчас находимся, но я просто хочу знать, есть ли простой способ сделать это с помощью jquery
Я предполагаю, что ответа нет, нет прямого пути. Для общей функции, которая добавляет эту возможность, см. Ответ Greg W.
Это дало мне представление о небольшой функции jQuery для имитации поведения $.post, как вы описали. Он по-прежнему использует невидимые формы в фоновом режиме, но синтаксис для него относительно чист и прост.
$(document).ready(function(){
$('#myButton').PostIt('post.php', {foo:'bar', abc:'def', life:42});
$('#myOtherButton').PostIt('post.php', dataObjectFromSomewhereElse);
});
$.fn.PostIt = function(url, data){
$(this).click(function(event){
event.preventDefault();
$('body').append($('<form/>', {
id: 'jQueryPostItForm',
method: 'POST',
action: url
}));
for(var i in data){
$('#jQueryPostItForm').append($('<input/>', {
type: 'hidden',
name: i,
value: data[i]
}));
}
$('#jQueryPostItForm').submit();
});
}
Я адаптировал код Greg W к прямой функции, которую вы можете вызвать в своем коде:
function postIt(url, data){
$('body').append($('<form/>', {
id: 'jQueryPostItForm',
method: 'POST',
action: url
}));
for(var i in data){
$('#jQueryPostItForm').append($('<input/>', {
type: 'hidden',
name: i,
value: data[i]
}));
}
$('#jQueryPostItForm').submit();
}
Если вам нужно выдать запрос POST, то невидимая форма является одним из ваших лучших вариантов.
Если приложение будет работать с запросом GET, я бы закодировал данные в querystring и сделал.
document.location.href =
Вы можете использовать jQuery.serialize
для генерации строки запроса.
HTML:
<form id="myform" method="get" acction="page2">
<!-- data -->
</form>
JS:
$('#myform').bind('submit', function(ev) {
ev.stopPropagation();
var ok = true;
//manipulate html and 'ok'
return ok; // if ok == false, don't execute post
});