2010-07-21 44 views
1

假设我有一个多形式的页面,例如:jQuery Ajax POST响应 - 知道哪个表单提交?

<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 POST请求,服务器会响应用下面的一些脚本:

// 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响应并插入响应数据BUT,如上图所示I 可能不想替换,所以这对我来说不是真正的选择。
  3. 我的首选项以某种方式在响应中创建一个$ .fn.function原型,该原型可以在提交元素上调用。这必须仔细确定范围或唯一性,以便任何后续表单提交都不会重新定义该功能。

我真的很难找到解决办法,我会很感激这方面的任何想法。这不一定相关,但我在RoR环境中使用它,并且POST请求是对REST控制器操作的.js响应。更多的一个jQuery的问题,我猜想一个RoR。

亲切的问候,

凯文。

回答

2

你还没有提到什么似乎是最明显的技术:隐藏的领域。

<input type="hidden" name="form_id" value="foo"> 
+0

:)这是我第一次尝试尝试。感谢您的建议。 – 2010-07-21 09:16:40

+0

我应该补充说,阻止我做这件事的唯一原因是我不喜欢修改HTML以适应JS,但是您是正确的 - 它确实看起来像是一个明显的解决方案。 – 2010-07-21 09:22:22

+0

我会给你一票,但我在这里没有名誉! – 2010-07-21 09:27:47

0

希望我能正确理解你的问题。你想知道的是实际提交数据的形式。这是我的代码建议:

$('.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; 
}); 
+0

这是我想做的,除非脚本响应需要创建一个函数,我可以调用该元素。 即(此语法将遍布整个地方,因为我不是JS专家,但希望它会显示目的) $(form_id).returnedScript.someFuncInReturnedScript – 2010-07-21 09:26:58