5

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

...そしてステップ4で.tokenを更新します

これもうまくいかない

更新 2: また、私が行う場合:

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

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

... 関数 getAToken が 1 回だけ呼び出されることがわかります (1 つのアラートのみ)

4

4 に答える 4

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) を使用しています。

于 2010-06-22T18:41:22.423 に答える
1

ソースを調べたところuploadifySettings()、オプションの文書化されていない (ここには表示されません) 3 番目のパラメーターがあることに気付きました。どうやらそのままに設定すると、既存の設定が上書きされ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

于 2010-06-12T19:01:50.277 に答える
0

解決策を見つけました:

「onSelect」機能に誤りがありました。要素 ID 名のつづりを間違えていました。代わりに file_upload が fileUpload でした。それが scriptData パラメータを更新しなかった理由です。私はそれがばかげた間違いであることを知っていますが、簡単に犯すことができます. onSelect 関数全体を次に示します。

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

これが問題かどうかを確認してください

于 2012-01-09T16:54:09.180 に答える
0

初期化時にインラインで関数を定義してみてください。いいえ:

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

ただし、これが他のソリューションと異なる理由はわかりません。

于 2010-06-14T16:07:33.410 に答える