2016-06-13 11 views
0

Ich habe meine Datei hotlaps.php wo ich ein Skript von JavaScript erstellt haben mit:Wie Parameter von PHP-Datei Javascript passieren

echo "<body onload=\"func1(".$array_1.",".$array_2.",".$array_3.");\">"; 

In meiner Datei hotlaps.js Ich habe diese Funktion:

function func1(array1, array2, array3){ 

    arr1 = array1; 
    arr2 = array2; 
    arr3 = array3; 
    alert(piloto_array[0]); 
    start(); 
} 

Aber meine Variablen arr1, arr2 und arr3 sind undefiniert. Warum?

+1

Also, was enthalten diese Variablen? Die richtige Codierung wäre höchstwahrscheinlich → ['json_encode'] (http://php.net/json_encode) → [' htmlspecialchars'] (http://php.net/htmlspecialchars). – mario

+0

Benötigen Sie mehr Code, um schreiben/helfen zu können. Aber im Wesentlichen müssen Sie Ajax verwenden http://w3epic.com/how-to-pass-variable-from-php-to-javascript-javascript-to-php/ –

+0

Meine Variablen sind Arrays von Werten. –

Antwort

1

Versuchen Sie folgendes:

<body onload='func1(".json_encode($array_1).",".json_encode($array_2).",".json_encode($array_3).");'>"; 
+1

'json_encode' wird doppelte Anführungszeichen' '' verwenden, so dass Sie damit verschachtelte Zitate bekommen. –

+0

Also "nach" onload = zu ändern sollte helfen? (ich bearbeitet post) –

+1

das ist ein gutes Geschäft :) –

-1

Sie müssen die Variablen von php in Ihrem HTML-Code

<body onload=\"func1("<?php echo $array_1; ?>","<?php echo $array_2; ?>","<?php echo $array_3; ?>");\">"; 
+0

'Hinweis: Array zu String-Konvertierung ' –

1

drucken, wenn Sie von Ihrem PHP-Arrays in Ihrem Javascript-Variablen machen möchten, können Sie dann muss json_encode verwenden, aber sei vorsichtig, dass es doppelte Anführungszeichen " für Arrays verwendet, die in deinem Beispiel mit verschachtelten doppelten Anführungszeichen in anderen verschachtelten doppelten Anführungszeichen zerbrechen. Verwenden Sie einfache Anführungszeichen, um dies zu vermeiden.

Ich habe die Dinge etwas besser verteilt, damit Sie sehen können, was leichter passiert.

<?php 
$array_1 = array ('one','two','three'); 
$array_2 = array ('four','five','six'); 
$array_3 = array ('seven','eight','nine'); 

echo " 
    <body onload=' 
    func1(
     ".json_encode($array_1).", 
     ".json_encode($array_2).", 
     ".json_encode($array_3)." 
    ); 
    '/> 
"; 

?> 

<script> 
function func1(array1, array2, array3){ 
    arr1 = array1; 
    arr2 = array2; 
    arr3 = array3; 
    alert(arr1); 
} 
</script> 

Ergebnisse in dieser Ausgabe:

<body onload=' 
 
    func1(
 
     ["one","two","three"], 
 
     ["four","five","six"], 
 
     ["seven","eight","nine"] 
 
    ); 
 
    '/> 
 

 
<script> 
 
function func1(array1, array2, array3){ 
 
    arr1 = array1; 
 
    arr2 = array2; 
 
    arr3 = array3; 
 
    alert(arr1); // just print the first one, you get the idea 
 
} 
 
</script>

+0

Sie müssen möglicherweise die einfachen Anführungszeichen zu entkommen. Immerhin ist das ziemlich unordentlich. Es ist besser, wenn Sie nicht 'verwenden, sondern z. jQuery's '$ (document) .ready' –

+0

@ ssc-hrep3 Ich stimme zu, keine der' on * '[aufdringlichen JavaScript-Attribute] (https://en.wikipedia.org/wiki/Unobtrusive_JavaScript) zu verwenden, aber das war es nach dem OP-Beispiel, sowie die schreckliche "Alarmierung". Bei Problemen mit geschachtelten Zitaten hängt es von den Daten ab, ob zusätzliche Escapes erforderlich sind, aber doppelt garantiert werden kann. Ich habe das Leerzeichen in meinem Beispiel erweitert, um es besser zu demonstrieren. –

+0

Danke !!! : DDD Es funktioniert –

1

die Syntax zu vereinfachen und das Chaos mit den Anführungszeichen (IMHO) vermeiden Sie die Variablen in PHP und JS so initialisieren könnte :

<?php 
$array_1 = json_encode([1,2,3]); 
$array_2 = json_encode([4,5,6]); 
$array_3 = json_encode([7,8,9]); 
?> 
<script type="text/javascript"> 
    var array_1 = <?php echo $array_1; ?>, 
     array_2 = <?php echo $array_2; ?>, 
     array_3 = <?php echo $array_3; ?>; 
</script> 
<body onload="func1(array_1,array_2,array_3)"> 
<script type="text/javascript"> 
    function func1(array1, array2, array3) { 
     console.log(array1); 
    } 
</script> 
Verwandte Themen