从Prototype js中的Ajax请求上传/处理文件

时间:2017-01-10 10:55:00

标签: magento prototypejs checkout

我正在尝试处理来自prototype.js Ajax请求的文件,但它无法正常工作。数据没有进入控制器($ _FILES)。

我在mapto的Checkout中添加了一个步骤,并希望上传文件以转到下一步。

我也试过下面的代码。

var request = new Ajax.Request(
                this.saveUrl,
                {
                    method: 'post',
                    requestHeaders: {"X-Prototype-Version": null},
                    contentType: 'multipart/form-data',
                    onComplete: this.onComplete,
                    onSuccess: this.onSave,
                    onFailure: checkout.ajaxFailure.bind(checkout),
                    postBody: formData,
                }
            );

请在这里帮助我。

1 个答案:

答案 0 :(得分:0)

很抱歉告诉你,但是通过ajax上传文件并不容易。

通过ajax发布时,会跳过文件输入字段,或者只获取文件名(而不是文件数据)。

有一种方法可以发送二进制数据 - 但它需要采用不同的方法。

使用HTML5文件/ FileReader API,您可以在javascript中读取文件,然后将文件内容作为请求的正文。

new Ajax.Request('/url.php?rawupload=1&id='+$F('id')+'&label='+label,
{
    'method':'post',
    'postBody':fileobject,
    'onSuccess':function() { alert('success'); }
});

您需要将表单字段放入GET参数中,以便将它们传递给PHP脚本。

在PHP脚本中,文件内容将像这样

$file = file_get_contents('php://input');

$file将包含您上传文件的内容,您可以将其写入文件系统或阅读内容等。