Jquery - отправить сообщение синхронно (не ajax)

У меня есть страница (page 1), которая принимает почтовые запросы, делает некоторые вещи и отображает некоторые данные в конце.

С другой страницы (page 2), я хочу перенаправить на page 1 при нажатии кнопки, конечно, посылая все соответствующие данные, необходимые page 1 через POST.

Я могу, конечно, использовать старый взломать невидимую форму на странице, набирая все данные, которые мне нужны с помощью jquery, сразу после того, как пользователь нажал кнопку и автоматически отправил(). Но это выглядит громоздким - гораздо лучше использовать синтаксис, похожий на $.post, а не начинать манипулировать html. $.post был бы идеальным, если бы он фактически перенаправлялся на страницу и не выполнял запрос асинхронно (я не могу просто перенаправить на page 1 после того, как сообщение ajaxy завершено, так как page 1 нужны данные для отображения чего-то).

Есть ли способ сделать то, что я хочу с jquery, или уродливые невидимые формы - единственный выход?

P.S

Я знаю, что есть другие запутанные способы достижения того, что я хочу, например, используя $.post и просто поместив html-ответ на страницу, в которой мы сейчас находимся, но я просто хочу знать, есть ли простой способ сделать это с помощью jquery

Ответы

Ответ 1

Я предполагаю, что ответа нет, нет прямого пути. Для общей функции, которая добавляет эту возможность, см. Ответ Greg W.

Ответ 2

Это дало мне представление о небольшой функции 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();
    });
}

Ответ 3

Я адаптировал код 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();
}

Ответ 4

Если вам нужно выдать запрос POST, то невидимая форма является одним из ваших лучших вариантов.

Если приложение будет работать с запросом GET, я бы закодировал данные в querystring и сделал.

document.location.href =

Вы можете использовать jQuery.serialize для генерации строки запроса.

Ответ 5

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


});