获取由ajax使用php发送的FormData()值

时间:2012-09-18 19:15:29

标签: php javascript ajax

我已经创建了非常好用的FormData(),因为我使用jQuery.ajax测试它。 但是因为我想要上传进度条,当我使用jQuery.ajax时我无法创建它。所以我决定直接使用ajax并发布表单数据。但是使用php获取表单数据是行不通的。

的javascript

xhr.open("POST","assets/php/upload.php?action=uploadFiles");
xhr.setRequestHeader('Cache-Control', 'no-cache');
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.setRequestHeader('Content-Type', 'multipart/form-data');
xhr.send(newFormData);

PHP

print_r($_FILES); //output, empty array

这是我的问题,为什么我不能使用php获取表单数据?

修改::

这是我尝试使用jquery创建进度条,但它不能很好地工作。进度条将非常快速完成,文件尚未上传。

function updateProgress(evt)
{
    // evt is an ProgressEvent.
    if (evt.lengthComputable)
    {
        var percentLoaded = Math.round((evt.loaded / evt.total) * 100);
        // Increase the progress bar length.
        $(".progress > div").css(
        {
            width: percentLoaded + '%'
        });

    }
}

$.ajax(
{
    url: 'assets/php/upload.php?action=uploadFiles',
    type: 'POST',
    data: newFormData,
    cache: false,
    xhr: function ()
    {
        myXhr = $.ajaxSettings.xhr();
        if (myXhr.upload)
        {
            myXhr.upload.addEventListener('progress', updateProgress, false);
        }
        return myXhr;
    },
    contentType: false,
    processData: false,
});

修改::

我终于找到了为什么我无法使用$ _FILES获取ajax请求。发生的原因是因为我设置了内容类型,现在如果我从请求中删除它,我可以得到ajax请求。但现在进度条将很快完成,而上传文件还没有完成。我的代码在哪里出问题?

谢谢你, 阿里

3 个答案:

答案 0 :(得分:0)

实际上我没有看到任何产生$ _FILES的东西。甚至更重要的是你不能直接在PHP中使用AJAX ...如果你使用javascript那么print_r($_FILES)是什么东西?浏览器发送AJAX请求而不是php。因此,当borwser加载页面时,您无法使用$ _FILES直接读取输出..您的其他页面应该读取$ _FILES ...并使用AJAX上传使用jsupload ...

答案 1 :(得分:0)

您可以使用plupload来执行此操作。

这里介绍了如何使用过程更新元素的示例http://www.plupload.com/example_custom.php

如果您下载该模块,它还包含与块一起使用的PHP代码(这是您完成所需文件上载行为所需的内容)。

答案 2 :(得分:0)

检查HTML5-powered Ajax file uploads和此项目:HTML5 AJAX File Uploader

  

此文件提供了一个JavaScript对象,以简化HTML5文件API的使用,以便进行AJAX上传。