Javascript 如何使用Jquery提交复杂表单';那是阿贾克斯?

Javascript 如何使用Jquery提交复杂表单';那是阿贾克斯?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在尝试使用Jquery的ajax提交表单。它有几个文本框、一些复选框和一个多选项下拉列表(即可以选择多个选项) 这里有人告诉我,我可以使用 $("input:checkbox[name=type]:checked") 然后我可以循环使用上述代码返回的所有值,将它们分配到如下数组: var types=new Array(); $.each(cboxes, function() { types[types.length]=$(this).val();

我正在尝试使用Jquery的ajax提交表单。它有几个文本框、一些复选框和一个多选项下拉列表(即可以选择多个选项)

这里有人告诉我,我可以使用

$("input:checkbox[name=type]:checked")
然后我可以循环使用上述代码返回的所有值,将它们分配到如下数组:

var types=new Array();

    $.each(cboxes, function()
      {
         types[types.length]=$(this).val();
      }
    );
并尝试使用以下方式提交表格:

var someField=$("#someField").val();
var someField2=$("#someField2").val();
var data={field1 : someField, field2=someField2, s_types:types};
$.post("signup.php?type=p",types);

但这不起作用,特别是复选框不能正确提交。如何使其工作?

我建议使用插件来实现这一点。看看这个。它还可以很好地与集成。

无需迭代每个字段即可获得表单值。jQuery有一个将表单输入序列化到querystring的方法。您可以这样做:

$.ajax({
  url: "mybackend.php",
  data: $("#myForm").serialize(),
  success: function(e) { // do something on success },
  error: function(e) { // do something on error }
});
请记住,javascript POST总是以UTF-8格式发送数据,因此,如果您计划发送带有国际字符的文本,请确保您希望在后端使用UTF-8格式。

默认jQuery不处理数组(),因此您不能按原样使用$.serialize。使用插件(如中所建议的)或覆盖$.param函数,以便正确处理数组:

function($) {
  $.param = function(a) {
    var s = [];
    if (a.constructor == Array || a.jquery) 
      jQuery.each(a, function() { s.push( encodeURIComponent(this.name) + "=" + encodeURIComponent( this.value ) ); });
    else
      for (var j in a)
        if (a[j] && a[j].constructor == Array) jQuery.each( a[j], function(){ s.push( encodeURIComponent(j) + "[]=" + encodeURIComponent( this ) ); });
        else s.push(encodeURIComponent(j) + "=" + encodeURIComponent(a[j]));
    return s.join("&").replace(/%20/g, "+");
  };
})(jQuery);

…然后使用$.serialize,如所建议的。

这是最好的主意。它还允许您通过ajax上传文件。