2010-06-07 30 views
5

Ich verwende uploadify und die Funktion zum Ändern der Einstellungen scheint nicht zu funktionieren..uploadifySettings funktioniert nicht wie erwartet

ich meinen Code aus dem folgenden Beispiel bin stützen:

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

Also hier ist, was ich tue:

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

Später ich die scriptData aktualisieren möchten:

$("#"+elementId).uploadifySettings("scriptData",{"token": "pleasework"}); 

... aber das funktioniert nicht, es verwendet immer noch die scriptData während der Initialisierung gesetzt.

Was mache ich falsch?


UPDATE: Ich muss dies tun, weil ich Token zu handhaben müssen. Hier ist der 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 

Ich habe versucht, dies zu tun bei der Initialisierung:

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

... und Update .token auf Schritt 4

Das funktioniert nicht, entweder

UPDATE 2: auch wenn ich es tue:

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

mit

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

... Ich kann sehen, dass die Funktion einmal an der Quelle nur genannt (nur 1 Alarm)

+0

Haben Sie eine Demo-Seite haben, uns zu zeigen? Es könnte ein Problem mit einem anderen Teil Ihres Skripts sein. – nebkat

+0

@neb: Nein, tut mir leid. Es ist auf dem Admin-Bereich eines unangekündigten Projekts: \ – marcgg

+0

@Neb: aber abgesehen von diesem Problem funktioniert der Rest des Skripts perfekt – marcgg

Antwort

1

Ich habe geschaut und ich merke, dass uploadifySettings() hat eine optionale, undokumentiert getAToken wird (es erscheint nicht here) dritter Parameter. Anscheinend, wenn Sie es auf true wie in $("#"+elementId).uploadifySettings("scriptData",{"token": "pleasework"}, true); setzen, wird es die vorhandenen Einstellungen für scriptData Clobber und vielleicht wird das einige Auswirkungen haben.

Aber basierend auf der Quelle kann ich nicht genau sagen, welche Auswirkungen eine Änderung der Einstellungen notwendigerweise hat.

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

Dieser Code ist ab Version 2.1.0.

Gibt es eine Möglichkeit, sich vor der Initialisierung über die Einstellungen zu entscheiden?

Auch ich fand diese bestehende Frage SO: Uploadify updateSettings problems.

+0

nice find, werde ich heute mehr in diese und geben Sie hier ein Update – marcgg

+0

@artlung: Ich habe versucht, die ResetObject zu testen und es hat nichts geändert.Und jetzt gibt es jetzt Möglichkeit, die Einstellungen vor, da sie muss sich ändern – marcgg

+0

Welche Einstellung ändern Sie gerade? Welche Werte ändern sich? – artlung

0

Versuchen Sie, die Funktion bei der Initialisierung in-line zu definieren? IE:

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

Ich bin mir nicht sicher, warum dies obwohl als einige Ihrer anderen Lösungen unterscheiden würde.

+0

Danke für die Antwort, ich werde das jetzt versuchen – marcgg

+0

Wenn ich versuche, das zu tun, versucht es, die Funktion als Parameter zu übergeben, führt es nicht tatsächlich aus. Server-Seite Ich enden mit einem ziemlich funky DB-Aufruf: SELECT COUNT (*) AS count_id FROM 'Tokens' WHERE (' Token' 'value' = 'function() {\ n return el.find (\". Token \ ") .val(); \ n} ') – marcgg

+0

doh! Vielleicht kann uploadify das nicht verarbeiten. Entschuldigung, Ihre ursprüngliche Lösung sieht aus, als wäre sie direkt aus den Dokumenten von Uploadify. Ich nehme an, es versteht sich von selbst, dass Sie die neueste Version haben und der Aufruf von uploadifysettings korrekt ausgeführt wird ... Manchmal hasse ich Javascript :) –

2

Dies funktioniert für mich, eine einzigartige nonce zu jeder Datei

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

Ich bin mit der neuesten Uploadify (2.1.0) und JQuery (1.4.1)

+0

Ich habe es versucht und es hat nicht funktioniert. Ich benutze jquery 1.4.2, aber ich bezweifle, dass es das Problem ist. Ich werde einen Blick auf Ihre Lösung werfen, wenn ich diese Woche einen Moment bekomme. – marcgg

+0

@marcgg - neugierig, welchen Fehler Sie dabei bekommen – Tony

0

fand die Lösung lädt Hinzufügen :

Ich hatte einen Fehler in der "onSelect" -Funktion. Ich hatte den Element-ID-Namen falsch geschrieben, stattdessen hatte ich file_upload ich hatte fileUpload und deshalb wurde der scriptData-Parameter nicht aktualisiert. Ich weiß, es ist ein dummer Fehler, aber leicht zu machen. Hier ist die ganze onSelect Funktion:

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

So prüfen Sie, ob dies das Problem

Verwandte Themen