如何使用jquery发送文件输入?

时间:2010-08-26 07:40:52

标签: jquery file input

我有一个包含3个文件输入的表单。我想通过jquery.i尝试在jquery中尝试序列化函数发送它,但我意识到这个函数不发送文件输入!

这是我的表格:

<form id="submit_pics" action="#" >

     file 1 : <input name="file1" id="file1" type="file" /><br />
     file 2 : <input name="file2" id="file2" type="file" /><br />
     file 3 : <input name="file3" id="file3" type="file" /><br />

     <br />
     <div>
         <a id="submit" href="javascript:;" ><img  src="uploads/images/button1.png" /></a>
     </div>

</form>

这是我的javascript代码:

<script type="text/javascript">

    $(document).ready(function(){

        $("#level3").click(function(event) {

            var str = $("#submit_pics").serialize(); 
            $.ajax({
                type: "POST",
                url: "track.php",
                data: str, 
                success: function(theResponse) {

                                        $('#req_result').html(theResponse);

                                    }

                return false;   
        });

    });

5 个答案:

答案 0 :(得分:6)

经过一番研究后,我发现你可以用:

$.ajax({
    url: 'track.php',
    type: 'POST',
    data: new FormData($("#submit_pics")[0]),
    processData: false,
    contentType: false
}).

我是Java程序员(Liferay),在服务器中我使用它来获取文件:

UploadPortletRequest uploadRequest = PortalUtil.getUploadPortletRequest(request);
File File1 = uploadRequest.getFile("file1");
File File2 = uploadRequest.getFile("file2");

我在php中存在类似的东西。

答案 1 :(得分:5)

很遗憾,您无法通过XMLHttpRequest上传文件。 AJAX实际上并不将表单发布到服务器,它以POST或GET请求的形式发送选定的数据。 Javascript无法从用户计算机获取文件并将其发送到服务器

您可以使用棘手的解决方法,将请求(不使用AJAX)发布到隐藏的iframe。

看一下 TUTORIAL

答案 2 :(得分:0)

你应该看一下JQuery Form Plugin。有了它,您可以轻松地以编程方式提交任何表单。

答案 3 :(得分:-1)

您无法通过$.ajax()执行此操作,但可以使用此uploadify plugin

答案 4 :(得分:-1)

此代码对我有用

 _private.saveFile=function(){
      var formElement = $("#formId")[0];
      var _params = new FormData(formElement),
          _url = $(formElement).attr("action");

      _private.postFile(_url,_params,function(data,error){ 
           console.log(data);
           console.log(error);
      });
 }


_private.postFile=function(_urlService,_parameters,callback){
    var _url= _public.getPath()+_urlService;
    _private.httpPostFile(_url,callback,_parameters);
};

_private.httpPostFile=function(_url,callback,_data){

    $.ajax({
        url: _url,
        type: 'POST',
        data: _data,
        mimeType: "multipart/form-data",
        contentType: false,
        cache: false,
        processData: false,
        success: function (data, textStatus, jqXHR) {
            callback(data,null);
        },
        error: function(xhr, status, error) {
            console.log('error ',error);
            console.log('status ',status);
            console.log('xhr ',xhr);
            callback(null,error);
        }
    });
}