繁体   English   中英

使用PHP获取Ajax发送的FormData()值

[英]Getting FormData() values that sent by ajax using php

我创建了效果很好的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请求。 但是现在进度条将很快完成,而上传文件尚未完成。 我的代码在哪里出问题?

谢谢你,Alireza

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

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

http://www.plupload.com/example_custom.php此处包含一个示例,该示例介绍了如何使用procent更新元素

如果下载该模块,则它还包含适用于块的php代码(这是完成所需的文件上传行为所需要的)。

检查支持HTML5的Ajax文件上传和以下项目: HTML5 AJAX File Uploader

该文件提供了一个JavaScript对象,可简化HTML5 File API用于AJAX上传的过程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM