1

在 javascript/jQuery 中,在调用文件上传插件之前,会设置一个变量:

doc_type = "q";

然后,插件被初始化。在插件选项中是:onSelect:,在选择文件时调用。代码如下所示:

var doc_type = "q";
$(function(){
    var project_num = $("#pnum").val();
    var uploadObj = $("#fileuploader").uploadFile({
        url: "upload_files_processor.php",
        method: "POST",
        onSelect: function(){
            doc_type = "W";
            //Or:
            //doc_type = $('#hidden_input').val();  <-- What I really need to do
            return true;
        },
            allowedTypes:"pdf,doc,docx,xls,xlsx,ppt,pptx,bmp,jpg,png,zip",
        fileName: "myfile",
        formData: {"project_num":project_num,"doc_type":doc_type},
        multiple: true,
        autoSubmit: true,
        showStatusAfterSuccess:false,
        onSuccess:function(files,data,xhr) {
            //Refresh documents table
        },
    });
}); //END document.ready()

问题:

在上传处理器upload_files_processor.php中,接收到的doc_type值为:

$doc_type = $_POST["doc_type"];  // q

我怎样才能收到价值W

参考:heyageek jquery 上传文件插件网站--点击API & Optionstab

4

3 回答 3

2

如果您查看 api 的高级选项卡。有一个名为的选项dynamicFormData被执行,并且似乎在发送之前被附加到表单数据中。

dynamicFormData: function() {
    var data ={"doc_type":doc_type };
    return data;
},

这是您需要的,因为doc_type将在发送之前而不是在创建时进行评估。

如果这有效。我真的没有办法测试它

于 2014-04-14T23:00:34.347 回答
1

在您的代码中,而不是formData: {"project_num":project_num,"doc_type":doc_type}, 使用这个:

dynamicFormData: function()
{
    return {
        project_num: $("#pnum").val(),
        doc_type: $('#hidden_input').val()
    };
},

并删除线条var doc_type = "q";var project_num = $("#pnum").val()

于 2014-04-14T23:25:26.097 回答
1

也许你可以这样做:

var formData = {
    project_num: null,
    doc_type: "q"
};

$(function() {

    formData.project_num = $("#pnum").val();

    var uploadObj = $("#fileuploader").uploadFile({
        url: "upload_files_processor.php",
        method: "POST",
        onSelect: function(){
            formData.doc_type = $('#hidden_input').val();
        },
        allowedTypes:"pdf,doc,docx,xls,xlsx,ppt,pptx,bmp,jpg,png,zip",
        fileName: "myfile",
        formData: formData,
        multiple: true,
        autoSubmit: true,
        showStatusAfterSuccess:false,
        onSuccess:function(files,data,xhr) {
            //Refresh documents table
        },
    });
});

我不确定插件如何在内部工作。如果它序列formData化为某种内部格式,您可能会遇到问题。但是,如果它只是将内部formData属性设置为指向提供的对象,那么这应该可以工作。引用formData保持不变;您只是在修改所使用对象的属性。

于 2014-04-14T22:55:20.313 回答