jQuery表单在ajax中提交(带文件)

时间:2013-09-18 07:07:03

标签: javascript php jquery ajax forms

这里有数百个这样的问题,但是我搜索过并搜索过但我无法找到问题的答案。我的目标是提交整个表单,包括其中的任何潜在文件。这是我的非功能性代码:

$(target + " form.dialog").submit(function(){
    var data = new FormData($(this));
    $.ajax({
        url: $(this).attr("action"),
        type: "post",
        data: data,
        cache: false,
        contentType: false,
        processData: false,
        success: function(data){
            // Do stuff..
        }
    });
    return false;
});

所以,基本上,我没有找到使用$(this)作为FormData()类参数的jQuery代码。根据规范,应该能够向类提交“表单元素”,并且我假设$(this)实际上并没有这样做。大多数示例如下所示:

var data = new FormData($('#myform')[0]);

但是我的实现处理了jQuery对话框()中加载的任何表单,它是通过ajax从服务器加载的HTML,所以我不能事先知道表单具体指向它的ID。

即使我这样称呼它:

var data = new FormData($(target + " form.dialog")[0]);

没有任何事情发生,或者更确切地说,没有提交任何参数。这是一个jQuery版本的问题吗? “target”变量始终是“#dialog”形式的I​​D,我是否需要以其他方式查找和检索表单元素?

当我这样做时:

console.log(typeof($(target + " form.dialog")[0]))

返回“object”,我假设它是FormData()类的错误类型...感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

FormData是普通的JS,它不接受jQuery对象而只接受普通的JS表单,只需使用:

var data = new FormData(this);

$.ajax({
    url: $(this).attr("action"),
    type: "post",
    data: data,
    ....
});