将整个表单作为数据传递到jQuery Ajax函数中

时间:2010-01-07 10:38:48

标签: jquery ajax

我有一个jQuery ajax函数,并希望提交一个完整的表单作为发布数据。我们不断更新表单,因此不断更新应在请求中发送的表单输入变得乏味。

6 个答案:

答案 0 :(得分:250)

有一个功能可以完成这个:

http://api.jquery.com/serialize/

var data = $('form').serialize();
$.post('url', data);

答案 1 :(得分:45)

如果你想用post方法发送一个表单,那么

serialize()不是一个好主意。例如,如果你想通过ajax传递一个文件,那就不行了。

更好的解决方案是制作FormData并发送它:

    var myform = document.getElementById("myform");
    var fd = new FormData(myform );
    $.ajax({
        url: "example.php",
        data: fd,
        cache: false,
        processData: false,
        contentType: false,
        type: 'POST',
        success: function (dataofconfirm) {
            // do something with the result
        }
    });

答案 2 :(得分:24)

通常在表单元素上使用serialize()

请注意多个< select>选项在同一个键下序列化,例如

<select id="foo" name="foo" multiple="multiple">
    <option value="1">one</option>
    <option value="2">two</option>
    <option value="3">three</option>
</select>

将生成一个查询字符串,其中包含多个相同查询参数的出现位置:

[path]?foo=1&foo=2&foo=3&someotherparams...

可能不是你想要的后端。

我使用这个JS代码将多个参数减少为以逗号分隔的单个键(在John Resig所在地的线程中从评论者的响应中无耻地复制):

function compress(data) {
    data = data.replace(/([^&=]+=)([^&]*)(.*?)&\1([^&]*)/g, "$1$2,$4$3");
    return /([^&=]+=).*?&\1/.test(data) ? compress(data) : data;
}

将上述内容变为:

[path]?foo=1,2,3&someotherparams...

在您的JS代码中,您可以这样称呼它:

var inputs = compress($("#your-form").serialize());

希望有所帮助。

答案 3 :(得分:15)

使用

serialize( )

var str = $("form").serialize();

将表单序列化为查询字符串,可以在Ajax请求中将其发送到服务器。

答案 4 :(得分:1)

执行此操作的好jQuery选项是FormData。通过表单发送文件时,此方法也适用!

<form id='test' method='post' enctype='multipart/form-data'>
   <input type='text' name='testinput' id='testinput'>
   <button type='submit'>submit</button>
</form>

jQuery中的send函数如下所示:

$( 'form#test' ).submit( function(){
   var data = new FormData( $( 'form#test' )[ 0 ] );

   $.ajax( {
      processData: false,
      contentType: false,

      data: data,
      dataType: 'json',
      type: $( this ).attr( 'method' );
      url: 'yourapi.php',
      success: function( feedback ){
         console.log( "the feedback from your API: " + feedback );
      }
});

要向表单添加数据,您可以在表单中使用隐藏的输入,也可以动态添加:

var data = new FormData( $( 'form#test' )[ 0 ] );
data.append( 'command', 'value_for_command' );

答案 5 :(得分:0)

其他解决方案对我不起作用。也许我正在研究的项目中的旧DOCTYPE阻止了HTML5选项。

我的解决方案:

<form id="form_1" action="result.php" method="post"
 onsubmit="sendForm(this.id);return false">
    <input type="hidden" name="something" value="1">
</form>

js:

function sendForm(form_id){
    var form = $('#'+form_id);
    $.ajax({
        type: 'POST',
        url: $(form).attr('action'),
        data: $(form).serialize(),
        success: function(result) {
            console.log(result)
        }
    });
}