Ответ JQuery Ajax POST - зная, какая форма отправлена? - PullRequest
1 голос
/ 21 июля 2010

Предположим, у меня была страница с несколькими формами, такая как:

<form id="A" class="jaxy" ... />
<form id="B" class="jaxy" ... />
<form id="C" class="jaxy" ... />

Затем у меня есть JQuery

$('.jaxy').live('submit', function() {
  $(this).startLoadingSpinner;
  $.post(this.action, $(this).serialize(), $(this).stopLoadingSpinner, "script");
  return false;
});

Когда отправляется форма "jaxy", есть пост-запрос Ajaxи сервер может ответить каким-нибудь сценарием, подобным следующему:

// The code I wish I had...
// If there was an error with the form it might respond...
$(whichever_form_posted).replaceWith("<form id="B" class="jaxy" .../>")
// or if everything went well it might...
$(whichever_form_posted).empty();
alert("Everything is right with the world! Give yourself a pat on the back.");

Проблема, которую я, очевидно, испытываю, заключается в том, чтобы знать, какая форма отправила запрос на отправку в первую очередь.Посмотрим, есть ли у меня 3 возможных маршрута:

  1. Я могу отправить селектор DOM в параметрах POST?или
  2. Я мог бы запросить HTML-ответ и вставить данные ответа, НО, как показано выше, я мог бы не захотеть заменять, так что это не совсем вариант для меня.
  3. Мои предпочтения каким-то образом создают прототип $ .fn.function в ответе, который может быть вызван для отправляющего элемента.Это должно быть тщательно определено или уникально, чтобы любые последующие представления формы не переопределяли функцию.

Я действительно изо всех сил пытаюсь найти способ обойти это, и я был бы признателен за любые мысли по этому поводу.,Это не обязательно актуально, но я использую это в среде RoR, и запрос POST является ответом .js на действие контроллера RESTful.Еще вопрос jQuery, который мне кажется RoR.

С уважением,

Кевин.

Ответы [ 2 ]

2 голосов
/ 21 июля 2010

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

<input type="hidden" name="form_id" value="foo">
0 голосов
/ 21 июля 2010

Надеюсь, я правильно понимаю вашу проблему.То, что вы хотите знать, это то, какая форма на самом деле представляет данные.Вот мое предложение кода:

$('.jaxy').live('submit', function() {
  // get the id of the form that makes this request
  var form_id = $(this).attr('id');

  $(this).startLoadingSpinner;

  $.post(this.action, $(this).serialize(), function(data){ 
        alert(form_id); 
    }, "script");

  return false;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...