Javascript .uploadifySettings未按预期工作

Javascript .uploadifySettings未按预期工作,javascript,jquery,jquery-plugins,uploadify,Javascript,Jquery,Jquery Plugins,Uploadify,我正在使用,更改设置的功能似乎不起作用 我的代码基于以下示例: #(‘#someID’).uploadifySettings(’scriptData’, {‘name’ : some.val()}); 下面是我正在做的: // INITIALIZATION $("#"+elementId).uploadify({ // other data "scriptData": { "token": token } }); 稍后,我要更新scriptData: $("#"+el

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

我的代码基于以下示例:

#(‘#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()
}


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

我查看了源代码,我注意到
uploadifySettings()
有一个可选的、未记录的(未显示)第三个参数。显然,如果您将其设置为
true
,如
$(“#”+elementId)
它将破坏
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

是否有办法在初始化前确定设置


此外,我还发现了这样一个问题:。

是否尝试在初始化时在线定义函数?即:

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

我不知道为什么这会不同于您的其他一些解决方案。

这对我来说很有效,为每个文件上载添加了一个唯一的nonce

            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
            });
函数setScriptData(){
$(“#产品#附件”)。上载设置(“脚本数据”,
{
“_fsg_发行版会话”:”,
“真实性令牌”:“,
“nonce”:新日期()。getTime()+“”
}
);
console.debug($(“#产品_附件”).uploadifySettings(“scriptData”);
}
$(“产品附件”)。上传({
上传程序:'/uploadify/uploadify.swf',
脚本:'/products/temp_upload',
cancelImg:“/uploadify/cancel.png”,
fileDataName:“资产[临时文件]”,
'queueID':'fileQueue',
onComplete:函数(事件,ID,fileObj,响应,数据){fileOnCompleteHandler(事件,数据);},
onSelect:setScriptData,
是的,
多:错,
按钮名称:'/images/attach.png',
fileNameMaxLength:30
});

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

找到解决方案:

我在“onSelect”函数中出错。我拼错了元素id名称,而不是文件上传我有文件上传,这就是为什么它没有更新scriptData参数。我知道这是一个愚蠢的错误,但很容易犯。以下是整个onSelect函数:

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

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

您是否有演示页面向我们展示?你的剧本的另一部分可能有问题。@neb:对不起,没有。它在一个未公布的项目的管理部分:\@neb:但是除了这个问题之外,脚本的其余部分可以工作perfectly@marcgg我不确定,但最好的办法是让firefox的firebug(或google chrome inspector)一步一步地跟踪你的结果。从一个简单的“uploadifySettings”更改开始,然后继续,直到找到问题为止。@neb我尝试了这个,但没有发现任何问题,这就是为什么我最后发布了这个问题^^很好的发现,我今天将对此进行更多的研究并提供更新here@artlung:我尝试将resetObject设置为trye,但没有改变任何内容。现在有了一种方法来决定之前的设置,因为它们必须改变。你到底在改变什么设置?什么值会改变?@artlung:为了上传一些东西,我需要传递一个令牌。第一次上载后,令牌过期。上传图像后,会有一个回调来获取一个新令牌,我需要设置uploadify以将这个新令牌作为参数传递(这有意义吗?)如果将设置设置为引用返回当前令牌的函数的函数,会怎么样?因此,无论在何处设置令牌而不是
{'myToken':'B12345'}
您都需要执行
{'myToken':currentMyToken()}
的操作,然后只需重置
currentMyToken()
的值。让它返回当前标记:
var currentMyToken=function(){return'B12345';}{}如果我尝试这样做,它会尝试将函数作为参数传递,但实际上不会执行它。服务器端我以一个非常时髦的DB调用结束:选择COUNT(*)作为COUNT\u id从
tokens
WHERE(
tokens
value
='function(){\n return el.find(\“.token\”).val();\n}')doh!也许uploadify无法处理这个问题。抱歉,你原来的解决方案看起来像是直接从Uploadify的文档中获得的。我想不用说,您已经获得了最新版本,并且对uploadifysettings的调用正在正确执行。。。有时我讨厌javascript:)我试过了,但没用。我使用的是jQuery1.4.2,但我怀疑这是问题所在。本周有空的时候,我会看看你的解决方案
'onSelect' : function(event,data) {
            $("#file_upload").uploadifySettings('scriptData', {'id' : $('#name_of_the_element').val()}
            );
        }