.uploadifySettings не работает должным образом - PullRequest
5 голосов
/ 07 июня 2010

Я использую 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()
}

... и обновить .token на шаге 4

Это не работаетлибо

ОБНОВЛЕНИЕ 2: Также, если я сделаю:

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

с

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

... Я вижу, что функция getAToken вызывается только один раз (только1 оповещение)

Ответы [ 4 ]

2 голосов
/ 22 июня 2010

Это работает для меня, добавляя уникальный одноразовый номер к каждому загружаемому файлу

            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 голос
/ 12 июня 2010

Я посмотрел на источник и заметил, что uploadifySettings() имеет необязательный, недокументированный (он не появляется здесь ) третий параметр. По-видимому, если вы установите его на 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 проблемы .

0 голосов
/ 09 января 2012

НАЙТИ РЕШЕНИЕ:

У меня была ошибка в функции "onSelect". Я неправильно написал имя элемента, вместо file_upload у меня был fileUpload, поэтому он не обновил параметр scriptData Я знаю, что это глупая ошибка, но ее легко сделать. Вот вся функция onSelect:

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

Так проверьте, если это проблема

0 голосов
/ 14 июня 2010

Попробуйте определить встроенную функцию при инициализации? IE:

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

Я не уверен, почему это будет отличаться от некоторых других ваших решений.

...