Jquery Form Plugin还是Jquery序列化?

时间:2011-02-28 00:03:50

标签: jquery forms serialization jquery-plugins jquery-forms-plugin

我想知道 jQuery Form Plugin serialization?

有什么样的优势

如果我选择使用表单插件,我可以使用新的jQuery 1.5功能吗?

表单插件还有什么东西可以阻止多个帖子吗?我通常使用 Ajax manager 插件来阻止重复的ajax帖子,但我认为我不能将它与Form Plugin一起使用。

由于

5 个答案:

答案 0 :(得分:3)

我刚刚看了一下这个表单插件,说实话,如果你在使用jquery方面有一点经验,那么没有理由使用插件。我没有看到任何你无法通过简单的方式使用普通jquery来完成的事情。 如果我需要使用ajax发送我的完整表单数据,请使用序列化。

这就是基本的ajax调用所需要的,表单插件可以做些什么来使这更容易?

$.ajax({
  type: 'POST',
  url: post/to/this/url,
  data: $("#myForm").serializeArray(),
  success: function() {
    // Woopie success!
    window.location.href = successurl;
  },
  error: function(jqXHR, textStatus, errorThrown){
    // do something with errors
  }
});

答案 1 :(得分:3)

jQuery Form Plugin提供了将ajax与表单一起使用的简单性。它将使用表单属性来确定提交表单的方式和位置。表单的method属性告诉插件要使用的请求类型。表单的action属性告诉它提交表单的位置。

考虑这样的示例表单:

<form id="myform" action="submit.php" method="post">
<!--inputs and submit button go here-->
</form>

本质上它允许你写:

$('#myform').ajaxForm();

而不是

$.post("submit.php", $("#myform").serialize());

jquery Form插件还允许您通过代码中的Ajax提交。

$('#myform').ajaxSubmit();

jQuery Forms Plugin无论如何都会序列化表单,你必须在提交到服务器之前序列化。 jQuery Form Plugin只是序列化了幕后的表单。上面的示例不处理来自服务器的任何响应 使用下面的代码,您可以将响应附加到其class属性包含“result”的元素。

$('#myform').ajaxForm({ target : ".result"});

您可以使用jQuery支持的任何选择器作为目标选项。

我不确定你是否可以使用延迟方法。我怀疑它是因为兼容性是针对1.3.2+而本机ajax方法包含在插件中。这样Deferred对象永远不会从插件内部返回。

jQuery表单确实有一个可以使用的beforeSubmit选项。因此,我们得到以下代码:

$('#myform').ajaxForm({ target: ".result", beforeSubmit: function(arr, $form, options) {
        // arr: The array of form data
        // The array of form data takes the following form: 
        // [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ] 

        //some code to check if we already submitted the form

        // return false to cancel submit                  
    }
});

但是,如果用户在提交表单后完成了页面,我建议不要这样做。它只会给客户端代码增加不必要的复杂性。如果用户在表单提交后将在页面上执行其他操作,那应该没问题。 jQuery Forms Plugin有一个成功选项,如果服务器返回200“OK”响应,则会调用函数回调。您还可以查看作者网站上的插件http://jquery.malsup.com/form/,了解有关该插件的更多信息。

答案 2 :(得分:2)

如果你想使用Ajax上传文件,那么这个插件是必须的。查看serializeArray的文档,它明确指出:

  

文件选择元素中的数据未序列化

此插件可以毫无问题地处理文件上传。

答案 3 :(得分:1)

当任务像序列化和提交表单一样简单时,您不需要表单插件。插件可以包含您可能永远不会使用或不需要的所有功能。此外,如果您的jQuery知识有限,或者您对插件的创建方式不太熟悉,那么按照您的需要自定义插件并不是一件容易的事。我去寻找一个插件,一个任务太复杂而无法创建,在这种情况下,如果已经有一个插件,为什么要重新发明轮子。一个例子是带有HSB控件的颜色选择器。如果您不知道颜色是如何工作的,那么进行研究和创建自己的颜色选择器的时间和精力将超过顶部。

您可以使用以下两行作为序列化和提交表单的基本方法。

var data = $(form).serialize();
$.post('post.php', '&'+data);

http://api.jquery.com/jQuery.post/#example-3

了解有关$ .post()的更多信息

现在,如果您觉得需要对表单执行复杂的操作,并且某些插件中已经提供了这些功能,那么尝试它并查看它对您的工作方式并没有什么坏处。

答案 4 :(得分:0)

表单插件非常有用,您可以在一次调用中通过ajax提交表单,其中包含与$ .ajax提供的选项相同的选项。这是简单地劫持界面以增强其行为的好方法。它也很好,因为它可以通过faux-ajax(iframe)顺利处理文件上传,而无需修改任何内容。

据我所知,表单插件本身不会做任何事情来避免多次提交。我在一个非常大的项目中使用插件来处理各种事情,我通常会通过一些额外的代码来处理这个问题,以跟踪表单是否处于中间提交状态,并避免输入该功能以便再次提交。