2010-09-30 6 views
1

J'ai le code suivant où je déclare une variable de tableau PHP et à l'intérieur d'une fonction, j'ai mis des données dans le tableau. J'affiche également les boutons mappés à chaque index du tableau qui montrera les données dans le tableau de PHP pour ce numéro d'index.Accéder à un tableau PHP à partir de JavaScript

Lors d'un test sur un navigateur, je ne reçois pas la bonne réponse. J'ai vérifié la source de page, il avait le code comme data_array = ["<?php echo implode ('',Array); ?>"]; au lieu du texte du tableau.

Qu'est-ce que je fais de mal et que dois-je faire pour obtenir la sortie correcte? (BTW, j'ai essayé d'exécuter le même sans déclarer la fonction et il a semblé fonctionner, mais j'ai besoin d'une fonction pour mon travail et ne peux pas prendre cette approche).

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
<html lang="en"> 
    <head> 
     <title>Example</title> 

     <?php 
      $giant_says = array(); 

      function display() { 
       global $giant_says; 

       $giant_says[] = "<a href='http://www.google.com'>Google</a>"; 
       $giant_says[] = "Yahoo!"; 
       $giant_says[] = "Bing"; 

       echo "<div id='content'>"; 
       echo $giant_says[0]; 
       echo "</div><br><br>"; 

       $i = 0; 
       while($i < count($giant_says)) { 
        echo "<input type='button' value='".$i."' onClick=\"addtext(".$i.");return false;\""; 
        $i += 1; 
       } 
      } 
     ?> 

     <script type="text/javascript"> 
      function addtext(index) { 
       giantSays = ["<?php echo implode ('","', $giant_says); ?>"]; 
       document.getElementById('content').innerHTML = giantSays[index]; 
      } 
     </script> 
    </head> 

    <body> 
     <?php 
      display(); 
     ?> 
    </body> 
</html> 
+0

* (référence) * [ 'json_encode'] (http://de.php.net/manual/en/function.json-encode.php) - Renvoie la représentation JSON d'une valeur – Gordon

Répondre

3

Vous avez le mauvais ordre, ce qui est à l'origine du implode() pour compresser un tableau vide. Je suggère également d'utiliser json_encode() au lieu de implode(). Il existe pour ce genre de chose - par exemple mis à jour ci-dessous:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
<html lang="en"> 
<head> 

    <title>Example</title> 

    <?php 

    $giant_says = array(); 

    function display(&$giant_says) { 

    // Calculate the array (referenced) 

    $giant_says[] = "<a href='http://www.google.com'>Google</a>"; 
    $giant_says[] = "Yahoo!"; 
    $giant_says[] = "Bing"; 

    // Return the HTML, to display later 

    ob_start(); 

    echo "<div id='content'>"; 
    echo $giant_says[0]; 
    echo "</div><br><br>"; 

    $i = 0; 
    while($i < count($giant_says)) { 
     echo "<input type='button' value='".$i."' onClick=\"addtext(".$i.");return false;\">"; 
     $i += 1; 
    } 
    $Return = ob_get_contents(); 
    ob_end_clean(); 
    return $Return; 
    } 

    $Display = display($giant_says); 

    ?> 

    <script type="text/javascript"> 
    function addtext(index) { 
     giantSays = <?php echo json_encode($giant_says); ?>; 
     document.getElementById('content').innerHTML = giantSays[index]; 
    } 
    </script> 

</head> 

<body> 

    <?php 
    echo $Display; 
    ?> 

</body> 
</html> 
+0

la raison pour laquelle j'ai $ giant_says [] rempli à l'intérieur de la fonction est parce que j'ai une autre fonction qui remplit réellement le tableau et non les déclarations que j'ai eu ici à titre d'exemple. Donc, je sais que votre solution fonctionnera mais ce dont j'ai besoin, c'est le tableau à remplir dans la fonction. Y a-t-il un moyen de le faire fonctionner? Merci. – user429113

+0

Il y a (presque) toujours un moyen, j'ai édité ma solution pour montrer mon point de vue sur la façon d'y parvenir. –

+0

Je ne peux pas exprimer combien je suis reconnaissant à votre réponse. Merci pour vos conseils. C'est la solution parfaite que je cherchais. – user429113

2

Vous essayez de faire imploser le tableau $giant_says avant que vous ayez rempli (vous vous appelez display() après l'imploser lorsque l'appel doit se produire avant).

+0

+1 bien repérée – Gordon

1

Le problème est que vous appelez la méthode d'affichage, qui remplit le contenu après que la partie html avec le javascript est envoyée. Le code html est "comme" faisant un "echo" html "" de votre php. Votre code HTML est déjà traité mais la méthode d'affichage n'est pas appelée. appelle la méthode avant le code html.

Exemple:

<?php 
    $giant_says = array(); 
    $giant_says[] = "<a href='http://www.google.com'>Google</a>"; 
    $giant_says[] = "Yahoo!"; 
    $giant_says[] = "Bing"; 

    function display() { 
     global $giant_says; 
     echo '<div id="content">'.$giant_says[0]."</div><br><br>"; 
     $i = 0; 
     while($i < count($giant_says)) { 
      echo "<input type='button' value='".$i."' onClick=\"addtext(".$i.");\" />"; 
      $i += 1; 
     } 
    } 
?> 
<html> 
    <head> 
     <title>Example</title> 
     <script type="text/javascript"> 
      function addtext(index) { 
      giantSays = ["<?php echo implode ('","', $giant_says); ?>"]; 
      document.getElementById('content').innerHTML = giantSays[index]; 
      return false; 
      } 
     </script> 
    </head> 
    <body> 
     <?php display(); ?> 
    </body> 
</html> 
+0

La raison pour laquelle $ $ scans_postes [] est remplie à l'intérieur de la fonction est parce que j'ai une autre fonction qui remplit réellement le tableau et non les déclarations que j'ai eues ici comme exemple . Donc, je sais que votre solution fonctionnera mais ce dont j'ai besoin, c'est le tableau à remplir dans la fonction. Y a-t-il un moyen de le faire fonctionner? Merci – user429113

Questions connexes