Ajax表单不发布带文件的输入类型

时间:2012-10-17 06:11:47

标签: jquery ajax

“我有简单的表单,并用ajax发布,但我无法在PHP脚本中获取$ _FILES”

<form id="submitForm" method="post" enctype="multipart/form-data" >
     <input type="file" name="file"  />
     <input type="text" name="name" />
    </form>

下面是ajax代码,告诉我哪里弄错了

$.ajax({
                url: '<?php echo base_url(); ?>getter/addItemRow',
                type:"POST",
                data:$('#submitForm').serialize(),
                context: $('#table')
                }).done(function(data) {
                  this.prepend(data);
                });

下面是php代码行

print_r(var_dump($_FILES));

这是返回空数组;

5 个答案:

答案 0 :(得分:3)

您无法使用AJAX / JavaScript传输文件!

AJAX ,只是 JavaScript ,无法访问存储在文件系统中的文件并将其传输到服务器。您可以使用隐藏的iframe来执行此操作。有一个很好的jquery form plugin,它可以让你的表单看起来和感觉就像它是AJAX,它也是supports file uploads

此插件使用的代码非常简单:

$(function() {
    $('#formid').bind("submit", function(){
        $(this).ajaxForm(function(result) {
            alert('the form was successfully posted!');
        });
    });
});

答案 1 :(得分:2)

无法通过ajax上传文件。您可以使用IFrame上传文件,而无需刷新页面。你可以在这里查看更多细节:

http://www.ajaxf1.com/tutorial/ajax-file-upload-tutorial.html

使用XHR2,支持通过AJAX上传文件。例如,通过FormData对象,但不幸的是,所有/旧浏览器都不支持它。

答案 2 :(得分:1)

<script src="http://malsup.github.com/jquery.form.js"></script> 


$(function() { 
    $('#submitForm').ajaxForm(function(result) {
                    $("#HiddenRowsa").hide();
                    $('#table').prepend(result);
                }).submit();
         });

我得到的所有答案都是相同的并且 RIGHT ,这个简单的jquery代码将起作用,这里提供的所有链接都缺少.submit()函数ajaxForm,所以其他所有正在寻找这类问题的人首先在头部包含上面的文件,然后编写上面的代码

答案 3 :(得分:0)

jQuery无法使用简单的AJAX处理PHP文件,因为$ _FILES是一个全局PHP变量,与javascript完全无关。你可以使用像这样的插件:jQuery File Upload,或更多。只需search and find on google

您也可以使用iFrame,但我不建议使用它,因为在IE中它会让页面发生变化时发出令人讨厌的点击

答案 4 :(得分:0)

这是另一种解决方案,如果您想立即上传文件,请使用ajaxForm执行此操作,在以下链接中找到ajaxForm not callingBack

以下是ajaxForm的链接,以了解有关方法的更多信息:: http://jquery.malsup.com/form/#ajaxForm