.uploadifySettings没有按预期工作

时间:2010-06-07 12:41:22

标签: javascript jquery jquery-plugins uploadify

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

我基于以下示例中的代码:

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

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

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

稍后我想更新scriptData:

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

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

我做错了什么?


更新:我需要这样做,因为我需要处理令牌。这是worflow:

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 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

我查看了源代码,我注意到uploadifySettings()有一个可选的,未记录的(它没有出现here)第三个参数。显然,如果您将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);
        });

该代码来自版本2.1.0

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

此外,我发现了现有的SO问题:Uploadify updateSettings problems

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

找到解决方案:

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

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

因此,请检查这是否是问题