如何通过AJAX利用dojo上传文件?

时间:2011-12-06 12:31:44

标签: php ajax file-upload upload dojo

我想使用dojox.form.Uploader小部件来处理通过AJAX上传到服务器的文件。

我包含了所需的定义:

dojo.require('dojox.form.Uploader');
dojo.require('dojox.form.uploader.plugins.HTML5');

我声明性地创建了Uploader

的实例
<div name="docUpload" multiple="false" type="file" dojoType="dojox.form.Uploader" id="docUpload" label="Upload Doc" uploadOnSelect="true" url="/ajax.php?foo=bar">
    <script type="dojo/connect" event="onComplete">
        /* ... */
    </script>
</div>

uploadOnSelect似乎以某种方式工作,因为/ajax.php获取了一个请求,该消息在消息日志中可见。此外,js控制台会在几秒钟后收到COMPLETED消息。

奇怪的是,$_FILES中的/ajax.php数组仍为空。我正在记录以下内容:

syslog(LOG_WARNING, json_encode($_REQUEST));
syslog(LOG_WARNING, json_encode($_FILES));

输出:

12月6日13:27:09 reline httpd2-prefork:{“foo”:“bar”} 12月6日13:27:09 reline httpd2-prefork:[]

我对PHP如何处理上传文件的理解有误吗?或者这是技术问题?

修改

我尝试将小部件包装在多部分表单中但id没有任何效果:

<form method="post" action="/ajax.php?foo=bar" id="docUploadForm" enctype="multipart/form-data">
    <div name="docUpload" multiple="false" type="file" dojoType="dojox.form.Uploader" id="docUpload" label="Upload Doc" uploadOnSelect="true">
        <script type="dojo/connect" event="onComplete">
            /* ... */
        </script>
    </div>
</form>

日志输出相同:

12月6日16:04:20 reline httpd2-prefork:{“foo”:“bar”} 12月16日16:04:20 reline httpd2-prefork:[]

2 个答案:

答案 0 :(得分:1)

这并不是完全回答你的问题,但几个月前我遇到了与dojo文件上传器相同的问题,并决定使用它 - http://valums.com/ajax-upload/ - 它功能非常丰富并完成工作非常好。易于集成。

干杯, 编

答案 1 :(得分:0)

尝试更改

<script type="dojo/connect" event="onComplete">
    /* ... */
</script>

<script type="dojo/connect" data-dojo-event="onComplete">
    /* ... */
</script>