• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] Es werden immer die gleichen Variablen übergeben

XardasX

New member
Hallo zusammen,

Im php-Forum wurde mir bis jetzt noch nicht geholfen, hoffentlich weiß hier jemand weiter.
Folgendes steht in meiner formular.php:
PHP:
<script>
        for (var i = 0; i <= 2; i += 1) {
            Dropzone.options["myDropzone"+i] = {
            maxFilesize: 500,
                init: function() {
                    var This = this;
                    $.get('upload.php', { name: i } )
                        .done(function(data){
                            $.each(data, function(key,value){
                                var mockFile = { name: value.name, size: value.size };
                                This.options.addedfile.call(This, mockFile);
                                This.options.thumbnail.call(This, mockFile, "uploads/"+value.name);
                        });
                    });
                }
            }; 
        }
        </script>

Und dies steht in der upload.php

PHP:
$text = $_GET['name'] ."  |  ";
        $datei_handle=fopen("information.txt","a");
        fwrite($datei_handle,$text);
        fclose($datei_handle);
In der information.txt steht dann "3 | 3 | 3 | 3 | ".
Ich möchte da aber "0 | 1 | 2 | 3 | " stehen haben.
Was mache ich falsch?

Ich bin für jede Hilfe dankbar.

Viele Grüße
XardasX
 
Sieht nach einem Caching Problem aus. Gibt zwei Alternativen: Entweder an den URL eine Zufallszahl hängen (finde ich weniger optimal, weil sich solche Zahlen wiederholen können) oder kein GET sondern POST verwenden.
 
Nein, das ist kein Cachingproblem, sondern liegt daran, dass eine Closure verwendet wird und deswegen in der init-Funktion die Variable i immer den gleichen Wert hat (den, den sie nach dem Ablauf der Schleife hat). Um das zu umgehen, musst du einen separaten Scope für jede init-Funktion erzeugen, der dann den richtigen Wert für i speichert:
Code:
<script>
	for (var i = 0; i <= 2; i += 1){
		(function(i){
			Dropzone.options["myDropzone" + i] = {
				maxFilesize: 500,
				init: function(){
					var This = this;
					$.get('upload.php', {name: i}).done(
						function(data){
							$.each(data, function(key,value){
								var mockFile = { name: value.name, size: value.size };
								This.options.addedfile.call(This, mockFile);
								This.options.thumbnail.call(This, mockFile, "uploads/"+value.name);
							});
						}
					);
				}
			}; 
		}(i));
	}
</script>

PS: so wie dein Code aussieht, würde ich jetzt nur "0 | 1 | 2 | " erwarten. Also nur drei Einträge und nicht vier...
 
Aber Korbinian, das ändert doch das Cachingverhalten des Browser nicht, oder? m.W. cachen die Browser - manche unterschiedlich - GET Anfragen trotzdem.
 
Nö, das Caching ist noch gleich, aber dann würde nur ein Element in der Datei stehen, da ja auch nur einmal angefordert wurde.

Ich würde ja anstat $.get() einfach $.ajax() machen mit der cache-Option auf false.
 
Das kommt ganz auf den Cache-Header an den der Request mitschickt.
 
Ersteinmal vielen Dank für die viele Unterstützung!!

Aber so ganz funktioniert es noch nicht.

Ich habe jetzt erstmal nur den Code übernommen:

PHP:
<script>
		for (var i = 0; i <= 2; i += 1){
		(function(i){
			Dropzone.options["myDropzone" + i] = {
				maxFilesize: 500,
				init: function(){
					var This = this;
					$.get('upload.php', {name: i}).done(
						function(data){
							$.each(data, function(key,value){
								var mockFile = { name: value.name, size: value.size };
								This.options.addedfile.call(This, mockFile);
								This.options.thumbnail.call(This, mockFile, "uploads/"+value.name);
							});
						}
					);
				}
			}; 
		}(i));
	}
		</script>
Es wird nun "1111" in die Datei geschrieben.
Vielleicht habe ich ja auch etwas nicht so richtig verstanden.
 
Kannst du mal einen Testlink machen, wo wir uns das live ansehen können? Mich irritiert immer noch extrem, dass du vier Einträge in der Datei bekommst...

... aber ich kenn' mich mit diesen Dropzones auch nicht aus.

@mikdoe: das hat nichts mit den Dropzones zu tun. Wenn das GET gecached würde, wird ja nur der erste Request auch wirklich durchgeführt, da die anderen aus dem Cache kommen. Man hätte also nur einen Eintrag in der Datei.
 
Zuletzt bearbeitet:
kann man hier im Forum eine Testseite erstellen?

Entschuldige für die Frage wenn es irgendwo beschrieben ist, ich hab jetzt auf anhib nichts gefunden.
 
Zurück
Oben