JQuery AJAX不用表单发送文件

时间:2011-08-23 17:06:01

标签: javascript jquery ajax forms file

我在JQuery中使用以下AJAX函数:

var formData = $('#FonykerEditForm').serialize();    
$.ajax ({
    type: 'POST',
    url: '<?php echo $html->url('/fonykers/edit',true); ?>',
    data: formData,
    dataType: 'json',
    success: function(response) {
        message.html(response.msg);
        message.fadeIn();
        if(!response.ok) {
            message.removeClass('success');
            message.addClass('error');
        } else {
            message.removeClass('error');
            message.addClass('success');
            username = $('#FonykerUsername').val();
            email = $('#FonykerEmail').val();
        }

        $('#save-account-button').removeAttr('disabled');
        $('.input-text').removeClass('ok');
        $('.input-combo').removeClass('ok');
    },
    error: function (xhr, ajaxOptions, thrownError){
        alert(xhr.statusText);
        alert(thrownError);
        $('#save-account-button').removeAttr('disabled');
    }
});

我遇到的问题是我的表单中的类型文件字段没有与表单的其余数据一起提交,如何将文件包含在ajax请求的数据中?

3 个答案:

答案 0 :(得分:3)

我试过这个链接,这对我来说很好。

http://portfolio.planetjon.ca/2014/01/26/submit-file-input-via-ajax-jquery-easy-way/

示例:

  $( '#my-form' ).submit( function( e ) {
  $.ajax( {
    url: 'http://host.com/action/',
    type: 'POST',
    data: new FormData( this ),
    processData: false,
    contentType: false
  } );
  e.preventDefault();
} );

答案 1 :(得分:2)

就像我在上面的评论中所说,通过ajax发送文件并不简单。无论如何你想试试。我见过的常规方法是创建一个新的iframe,为其添加一个文件输入字段,选择你的文件并以编程方式提交。这样,iframe就会在后台进行提交。

看看这个插件是如何做到的:

<击> https://github.com/valums/file-uploader/blob/master/client/fileuploader.js#L995

https://github.com/FineUploader/fine-uploader

答案 2 :(得分:0)

基本上,AJAX将以键/值对的形式提交数据。由于文件是二进制数据,因此无法使用Ajax提交文件。您需要使用标准表单提交数据而不是在服务器上接受form/multipart