我正在使用一个很棒的插件 - dropzone.js (dropzonejs.com) 让我的网站在注册新用户时更漂亮一些。
基本上,用户填写一个表单,将几张图片放入“放置区”,然后单击“提交”,这会触发一个将表单发布到 php 脚本的 ajax 调用。
我将 dropzone 参数设置为 enqueForUpload:false,这样可以防止文件自动上传,因为我需要在创建新用户 ID 后将它们上传到 uploads/$userid。我可以给 dropzone header 参数,我假设将其发布到 url,类似于 ajax 调用,而不是数据:{'userid': userid},dropzone 使用 header :{'userid': userid} ... 但是,dropzone 在 document.ready 上初始化,并且由于尚未声明 userid 变量,dropzone 无法初始化。
我猜我需要用 document.ready 初始化 dropzone,但现在还没有给它 header 。然后在 ajax 表单处理成功并返回 userid 后,调用 dropzone 上传并在此时为其提供标题。问题是,我不知道需要调用什么代码才能实现。
准备就绪时初始化 Dropzone:
$(document).ready(function(){
$('#dropzone').dropzone({
url: 'dropzoneprocess.php',
maxFilesize: 1,
paramName: 'photos',
addRemoveLinks: true,
enqueueForUpload: false,
});
});
然后...
$('#submit').on('click', function(){
validation crap here
$.ajax({
type: 'post',
url: 'postform.php',
data: {'various': form, 'values': here}
datatype: 'json',
success: function(data){
var userid = data.userid;
/* (and this is what I can't figure out:)
tell dropzone to upload, and make it
post userid to 'dropzone.php' */
});
});
最佳答案
如果您使用最新的 Dropzone 版本,参数 enqueueForUpload
已被移除,取而代之的是 autoProcessQueue
,这使得整个排队更容易。
因此,一旦您希望上传所有文件,只需调用 myDropzone.processQueue()
。
要向 XHR
添加额外的参数,您可以简单地注册到 sending
事件,该事件将 xhr
对象作为第二个和 formData
作为第三个参数,自己添加数据。像这样:
myDropzone.on("sending", function(file, xhr, formData) {
// add headers with xhr.setRequestHeader() or
// form data with formData.append(name, value);
});
关于php - 创建新用户后使用 Dropzone.js 上传,发送标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17378500/