【问题标题】:Getting FormData() values that sent by ajax using php使用 php 获取 ajax 发送的 FormData() 值
【发布时间】:2012-09-18 19:15:28
【问题描述】:

我创建了运行良好的 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 请求。但是现在进度条很快就会完成,而上传文件还没有完成。我的代码哪里出了问题?

谢谢你, 阿里雷萨

【问题讨论】:

  • 您正在尝试使用 AJAX 上传文件,stackoverflow.com/questions/166221/…
  • 谢谢,但我以前试过。那效果不好。进度条将很快完成,文件尚未上传。我已经编辑了我的问题,请再看一遍。谢谢

标签: php javascript ajax


【解决方案1】:

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

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

【讨论】:

  • 你知道Saleh是什么,现在的问题是文件上传尚未完成时进度将完成。
  • 如果你是在localhost上测试,因为测试使用了一个大文件,所以你看到进度是正确的
  • 哦,是的,我在本地主机上使用我的脚本,但文件将通过 ftp 上传到服务器上。因此在上传尚未完成时无法完成进度。 - 编辑:你是对的。我刚刚对其进行了测试,进展非常顺利。谢谢萨利赫。
【解决方案2】:

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

【讨论】:

  • 对不起,我不明白你的意思。你能给我一个例子或类似的东西吗?谢谢
【解决方案3】:

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

这里是http://www.plupload.com/example_custom.phphttp://www.plupload.com/example_custom.php 的一个示例,介绍了如何使用 procent 更新元素

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

【讨论】:

  • 感谢您的回复,但我不想使用插件或类似的东西,我只想知道我的问题的答案并编写我的脚本。
猜你喜欢
  • 2021-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-14
  • 2017-05-10
  • 1970-01-01
相关资源
最近更新 更多