我正在使用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个警报)
答案 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()}
);
}
因此,请检查这是否是问题