5

我正在使用uploadify,更改设置的功能似乎不起作用。

我的代码基于以下示例:

#(‘#someID’).uploadifySettings(’scriptData’, {‘name’ : some.val()});

所以这就是我正在做的事情:

// INITIALIZATION
$("#"+elementId).uploadify({ 
  // other data
  "scriptData": {
     "token": token
  }
});

稍后我想更新 scriptData:

$("#"+elementId).uploadifySettings("scriptData",{"token": "pleasework"});

...但这不起作用,它仍在使用初始化期间设置的 scriptData 。

我究竟做错了什么?


更新:我需要这样做,因为我需要处理令牌。这是工作流程:

1- Get a token
2- Init uploadify with this token
3- Upload a file
4- Get another token asynchronously
5- Add the token to the already initialized uploadify (bugged)
6- Go to 3

我尝试在初始化时这样做:

"scriptData": {
   "token": $(".token").val()
}

...并在第 4 步更新 .token

这也不起作用

更新2:另外,如果我这样做:

"scriptData": {
   "token": getAToken()
}

function getAToken(){
  alert("abcd");
  return "sometoken";
}

...我可以看到函数 getAToken 只被调用一次(只有 1 个警报)

4

4 回答 4

2

这对我有用,为每个文件上传添加一个唯一的随机数

            function setScriptData(){
                $("#product_attachment").uploadifySettings("scriptData", 
                    {
                      '_fsg_distro_session' : '<%= u cookies["_fsg_distro_session"] %>',
                      'authenticity_token'  : '<%= u form_authenticity_token if protect_against_forgery? %>',
                      'nonce'                               : new Date().getTime() + "<%= @current_user.id %>"                    
                    }
                );
                console.debug($("#product_attachment").uploadifySettings("scriptData"));
            }

            $("#product_attachment").uploadify({
                uploader                    : '/uploadify/uploadify.swf',
                script              : '/products/temp_upload',
                cancelImg           : '/uploadify/cancel.png',
                fileDataName        : 'asset[temp_file]',
                'queueID'           : 'fileQueue',
                onComplete              : function(event, ID, fileObj, response, data){ fileOnCompleteHandler(event,data); },
                onSelect                    : setScriptData,
                auto                : true,
                multi               : false,
                buttonImg           : '/images/attach.png',
                fileNameMaxLength   : 30
            });

我正在使用最新的 Uploadify (2.1.0) 和 JQuery (1.4.1)

于 2010-06-22T18:41:22.423 回答
1

我查看了源代码,我注意到它有一个可选的、未记录的(这里uploadifySettings()没有出现)第三个参数。显然,如果您将其设置为 in它会破坏现有设置,并且可能会产生一些影响。true$("#"+elementId).uploadifySettings("scriptData",{"token": "pleasework"}, true);scriptData

但根据来源,我无法准确判断设置更改必然会产生什么影响。

    uploadifySettings:function(settingName, settingValue, resetObject) {
        var returnValue = false;
        jQuery(this).each(function() {
            if (settingName == 'scriptData' && settingValue != null) {
                if (resetObject) {
                    var scriptData = settingValue;
                } else {
                    var scriptData = jQuery.extend(settings.scriptData, settingValue);
                }
                var scriptDataString = '';
                for (var name in scriptData) {
                    scriptDataString += '&' + name + '=' + escape(scriptData[name]);
                }
                settingValue = scriptDataString.substr(1);
            }
            returnValue = document.getElementById(jQuery(this).attr('id') + 'Uploader').updateSettings(settingName, settingValue);
        });

该代码来自 version 2.1.0

有没有办法在初始化之前决定设置?

另外,我发现了这个现有的 SO 问题:Uploadify updateSettings questions 。

于 2010-06-12T19:01:50.277 回答
0

尝试在初始化时内联定义函数?IE:

"scriptData": {
   "token": function() { return $("#token").val(); }
}

我不确定为什么这与您的其他一些解决方案不同。

于 2010-06-14T16:07:33.410 回答
0

找到解决方案:

我在“onSelect”函数中有一个错误。我拼错了元素 id 名称,而不是 file_upload 我有 fileUpload,这就是它没有更新 scriptData 参数的原因。我知道这是一个愚蠢的错误,但很容易犯。这是整个 onSelect 函数:

'onSelect' : function(event,data) {
            $("#file_upload").uploadifySettings('scriptData', {'id' : $('#name_of_the_element').val()}
            );
        }

所以检查这是否是问题

于 2012-01-09T16:54:09.180 回答