Frage von akin2000, 80

JavaScript Array PHP Array zuweisen?

Hey, Könnt ihr mir helfen wo der Fehler ist :c

        var url = new Array();
        alert("Works");
        for (var i = 0; i <= urlarray.length; i++) {
            alert("Works2"); // diese Meldung wird nicht angezeigt
            url[i] = '<?php echo $urlarray[i] ;?>';; // also ist der Fehler hier 

        }
var min = -10;
    var max = 10;
       
        var url = new Array();
        alert("Works");
        for (var i = 0; i <= urlarray.length; i++) {
            alert("Works2");
            url[i] = '<?php echo $urlarray[i] ;?>';;

        }
        alert("Works3");
        var random = Math.floor(Math.random() * (max - min + 1) + min);
        document.writeln(random);
        alert(random);
        var audio = new Audio(url[random]);

        audio.addEventListener('ended', function () {
            this.currentTime = 0;
            this.play();
        }, false);
        audio2.play();

Php Teil

   $i=0;
        while($row = $result->fetch_assoc()) {
        echo "
        <tr><td>".$row["Number"]."</td><td>".$row["MusikName"]." ".$row["MusikURL"]."</td></tr>";

$urlarray[i]=$row["MusikURL"];
         echo $urlarray[i];
 $i++;

Er sollte eigentlich die Array Werte vom php Teil dem JavaScript Array übergeben...Dann soll eine Audio unter dieser URL erstellt werden.... (URL-Teil) funktioniert

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von maximilianus7, 39

1. fehler: du verwendest auf js-ebene urlarray - du meinst wohl url (wie schon gesagt)
2.
statt

url[i] = '<?php echo $urlarray[i] ;?>';;


nimm:

<?php
echo "url[i] = '$urlarray[i] ';";
?>



Kommentar von akin2000 ,

Danke

Kommentar von akin2000 ,

Dieser Teil ist in JS

     url[i] = '<?php echo  $urlarray[i]; ?>';

wie kann ich bei $urlarray[i] auf das 'i' vom JavaScript zugreifen ?
Er greift auf das i vom php Skript dadrüber...habe versucht
i oben auf i2 zu ändern...doch dann akzeptiert er

$urlarray[i]

Als 'null' <.< denke ich...weil er somit in url[i] nichts speichert

Kommentar von maximilianus7 ,

nein, das i in $urlarray[i] gehört zu php und is eine erlaubte, wenn auch unsaubere form von $urlarray['i'] . i wird also als nicht-numericher index interpretiert - und da dort nichts eingetragen ist, wird 
"" für $urlarray[i] zurückgemeldet.

das gilt auch für meinen vorschlag.

folgen wir dann doch Malemeister:
ersetze:

for (var i = 0; i <= urlarray.length; i++) {
alert("Works2");
url[i] = '<?php echo $urlarray[i] ;?>';;

}

durch:

url = <?php echo $jsarray; ?>

und im php teil:

$jsarray = json_encode($urlarray);

Kommentar von akin2000 ,

ok ich wende mich langsam zu JSON ... aber $urlarray[0] [1] [2] usw beinhalten verschiedene URL ... wie werden diese mit

url = <?php echo $jsarray; ?>

alle in url gespeichert ? also so das url[0] = $jsarray erster Wert...

Kommentar von akin2000 ,

nein, habs jetzt verstanden ...sobald ich alert( url[1]) eingegeben habe hat er von

        {"i":" http:\/\/xxxx.de\/Audios\/xxx- xx.mp3"}

-> " <- ausgegeben .... wie mache ich das er nur die komplette  URL ausgibt ? Und  er speichert die URL


\/\/


 er speichert die URL bisschen falsch auf :/ oder habe ich allegemein mich vertan ?

Ich frage viel zu eilig antworte morgen bitte D: falls ich es selber doch hinkriege



Kommentar von akin2000 ,

ich komme nicht weiter ./

     $i=0;
while($row = $result->fetch_assoc()) {
echo "
".$row["Number"]."".$row["MusikName"]." ".$row["MusikURL"]."";

$urlarray[i]=$row["MusikURL"];
$jsarray = json_encode($urlarray);
echo $jsarray;
$i++;
}

während dieses Ablaufs ... gibt er mir alle Seiten im JSON Format wieder ... wenn ich in JS das aufrufe

 url2 = '<?php echo  $urlarray; ?>';

for (var i = 0; i < url2.length; i++){

url = ' <?php echo json_encode(stripslashes($jsarray)); ?>;';
alert(url);
}

gibt er mir nur das letzte vom JSON Format wieder :/ erwartet wäre ...das er alles wiedergibt...Das wäre das eine Problem :/

Habe im PHP bisschen was geändert ...

$urlarray[i]=$row["MusikURL"];

$jsarray[i] = json_encode($urlarray[i]);

echo stripslashes($jsarray[i]);

so gibt er "www.xxx.mp3" "www.xxx2.mp3" wieder ...mein Problem ist es...das was er ausgibt halt nummeriert in einen Array (url[1] [2]zu speichern und es an JS weiterzugeben ...so das ich in JS später nur mit audio = new Audio(url[1]) Sachen erledigen kann :/

Danke hast mir aber weitergeholfen

Kommentar von maximilianus7 ,

siehe:
$urlarray[i]=$row["MusikURL"];

das ist eine neue fehlerquelle: hier wird tatsächlich der string "i" als index genommen. du meinst

$urlarray[$i]=$row["MusikURL"];

diese form der indizierung (assoziatives array) wird in js nicht unterstützt. beim json_encode wird aus einem solchem
array ein js-object generiert, also die form {"attribut":"value", ...}

das erklärt dann den ausdruck {"i":" http:\/\/xxxx.de\/Audios\/xxx- xx.mp3"}

ausserdem (falls noch aktuell):
url = ' <?php echo json_encode(stripslashes($jsarray)); ?>;';
$jsarray enthält ja schon einen json ausdruck. das 2. encoding wandelt das ganze in einen string, inhalt ist das
ursprüngliche, mit "\" dekorierte json.
Meintest du vielleicht json_decode? aber wozu?

und:
for (var i = 0; i < url2.length; i++){ ...
in dieser schleife wird url2 nicht verwendet, du machst immer die gleiche zuweisung, die du dann auch ausgibst.

am besten du zeigst uns mal einen bereinigten code auf www.paste2.org

Kommentar von akin2000 ,

Nur der erste PHP Skript ist wichtig und der JS Skript (befindet sich unten) http://paste2.org/v2engJsA :

Kommentar von maximilianus7 ,

in zeile 51 befindet sich das missverständnis. json_encode soll nicht auf jedes $urlarray-element angewendet werden, da wird nur ein string-ausdruck "..." zurückgegeben. und bei jedem schleifendurchgang wird auch $jsarray (was kein array ist) neu gesetzt, klar das zum schluss nur der letzte wert übrig ist.

gehst du deinen code nicht mal gedanklich durch?

die idee ist: in der schleife erstellst du ausschliesslich das $urlarray, HINTER  der schleife machst du das encode, es sollte dann ein für js interpretierbarer aray ausdruck herauskommen (echo !), etwa

[ "http://www.url1.de", "http://www.url2.de", "http://www.url3.de" ]

damit wird dann im js teil durch jsarr = [ "http:..., ...] ebenfalls OHNE schleife das array erstellt.

wg. stripslashes: in dem json_decode musst du noch als 2. parameter
 JSON_UNESCAPED_SLASHES angeben (wusst ich auch nicht).

hat mit deiner frage nix zu tun, aber es tut mir weh: zeile 79:

$audio_types = array ("mpeg", "mpeg3", "x-mpeg3", ...);
if ( in_array($_FILES['audio_file']['type'], $audio_types ) ) { ...

Kommentar von akin2000 ,

Danke :) Also habe es hinkgekriegt alle URL in JS Alert(url) auszugeben , in diesem Format ["urlx.mp3","url2.mp3"...] wie kann ich auf diese einzelnd greifen ?

Ist dieses in_array eigentlich hierbei nötig ?

Du hast echt erfahrung o.O Wollte eigntlich garnicht auf .php eingehen(allgemein) ...Wollte JS und Node.JS und nur die Grundlagen von .php lernen...aber für einen Zweck tat sich .php echt gut...

Kommentar von maximilianus7 ,

merkwürdig, bei zeigt das alert entsprechend aus, allerdings ohne ". aber egal, url ist jetzt ein array, und du kannst mit url[0], url[1], url[2], ... oder eben auch url[random]  auf die elemente zugreifen


------------


"Ist dieses in_array eigentlich hierbei nötig ?"

was meinst du mit "hierbei"? mit dem js problem hat es jedenfalls nichts zu tun. deine if-konstruktion ist halt etwas grauslich.




Kommentar von akin2000 ,

ich kann mit url[1] url[2] nur auf einzelnde Buchstaben greifen...das verwirrt mich :/

Antwort
von Stunter, 42

Also ich bin es jetzt schnell überflogen und was ich sehe ist, dass du im JavaScript Teil auf "urlarray" zugreifen willst. Das Array heißt aber nur "url". Somit wird das Script gar nicht bis zum Ende ausgeführt, weil es fehlerhaft ist.

 ~ Stunter

Antwort
von Suboptimierer, 39

Wo geschieht denn die Übergabe? Ich vermisse so etwas wie 

var urlarray = new Array( <?= $urlarray[0] ?> );

zum Beispiel. (ungetestet)

Antwort
von Malemeister, 20

Hallo,

das was du da vor hast kann schon rein logisch nicht funktionieren. Das sind aber absolute Grundlagen. Solltest dir vielleicht nochmal anschauen wann PHP und wann Javascript ausgeführt wird.

Wandel einfach dein PHP Array in JSON um und übergebe dies an Javascript (am saubersten mit AJAX). Dort wandelst du den JSON String einfach wieder in ein Object/Array und fertig.

Grüß

Keine passende Antwort gefunden?

Fragen Sie die Community