开发者

.uploadifySettings not working as expected

开发者 https://www.devze.com 2023-01-02 08:04 出处:网络
I\'m using uploadify and the function to change the settings doesn\'t seem to be working. I\'m basing my code from the following example:

I'm using uploadify and the function to change the settings doesn't seem to be working.

I'm basing my code from the following example:

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

So here's what I'm doing:

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

Later on I want to update the scriptData:

$("#"+elem开发者_如何学PythonentId).uploadifySettings("scriptData",{"token": "pleasework"});

... but this is not working, it's still using the scriptData set during the initialization.

What am I doing wrong?


UPDATE: I need to do this because I need to handle tokens. Here's the 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

I tried doing this on initialization:

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

... and update .token on step 4

This doesn't work either

UPDATE 2: Also if I do:

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

with

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

... I can see that the function getAToken only gets called once (only 1 alert)


This works for me, adding a unique nonce to every file upload

            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
            });

I am using the latest Uploadify (2.1.0) and JQuery (1.4.1)


I've looked at the source and I notice that uploadifySettings() has an optional, undocumented (it does not appear here) third parameter. Apparently if you set it to true as in $("#"+elementId).uploadifySettings("scriptData",{"token": "pleasework"}, true); it will clobber the existing settings for scriptData and perhaps that will have some impact.

But based on the source I can't exactly tell what impact a change in settings necessarily has.

    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);
        });

That code is from version 2.1.0.

Is there a way to potentially decide on the settings before initialization?

Also, I found this existing SO question: Uploadify updateSettings problems.


Try defining the function in-line at initialization? IE:

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

I'm not sure why this would be different than some of your other solutions though.


FOUND THE SOLUTION:

I had a mistake in the "onSelect" function. I had misspelled the element id name, instead file_upload I had fileUpload and thats why it didnt update the scriptData parameter. I know its a silly mistake but easy to be made. Here is the whole onSelect function:

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

So check if this is the problem

0

精彩评论

暂无评论...
验证码 换一张
取 消