我正在使用一个很棒的插件dropzone.js(dropzonejs.com)来让我的网站在注册新用户时更漂亮一些。
基本上,用户填写一个表单,将几个图像放到“dropzone”中,然后单击“submit”,这将触发一个ajax调用,将表单发布到php脚本中。
我已经将dropzone参数设置为enqueforupload:false,这将阻止文件自动上载,因为我需要在创建新用户id之后将它们上载到uploads/$userid中。我可以给dropzone头参数,我假设它发布到url,类似于ajax调用,而不是数据:{'userid':userid},dropzone使用头:{'userid':userid}……但是,dropzone在document.ready上初始化,由于userid变量尚未声明,dropzone无法初始化。
我想我需要用document.ready初始化dropzone,但还没有给出它的头。然后在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);
});

07-28 02:41
查看更多