Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    542

    Come passare array da PHP a funzione JS

    Salve a tutti e auguri di buon anno nuovo.

    Ho bisogno del vostro aiuto.

    In una pagina.php includo un file di script js così:

    <title>Titolo</title>

    <SCRIPT src="funzioni.js"></SCRIPT>
    In un form ho una lista e sull'evento onghange chiamo una funzione

    javascript cosi:

    $temp =array("uno", "due");

    echo "<select name='c' onchange=\"funzionejs($temp)\"><option

    value='0'>genere</option>";

    La func funzionejs è:


    function travelsubcatlist(x)
    {

    for (i=0;i<x.length;i++){
    alert(x[i]);
    }
    }

    ma non riceve il parametro array o la sintassi è errata.
    L'alert da il messaggio "undefined"

    Quancuno sa qual'è la sintassi giusta?

    Grazie e buon anno nuovo
    Guidino

  2. #2
    Non vedo tag di apertura di php... spiega bene ciò che ti serve o a limite linkaci alla pagina, sapremo aiutarti...
    Antonio Correnti
    www.resetstudio.it

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    542

    Array da php a java

    Forse così è più chiaro:

    <html>
    <title>Titolo</title>

    <head>

    <script type="text/javascript">
    <!--

    function funzionejs(x)
    {

    for (i=0;i<x.length;i++){
    alert(x[i]);
    }
    }

    // -->
    </script>


    </head>
    <body>

    <?php
    $temp =array("uno", "due");
    echo "<form...>";

    echo "<select name='c' onchange=\"funzionejs($temp)\"><option value='0'>genere</option>";
    ...

    echo "</form>;
    ...

    ?>

    </body>
    </html>
    Grazie
    Guidino

  4. #4
    correggo il codice altrimenti non funziona...

    Codice PHP:
    <html>
    <title>Titolo</title>

    <head>

    <script type="text/javascript">
    <!--

    function funzionejs(x)
    {

    for (i=0;i<x.length;i++){
    alert(x[i]);
    }
    }

    // -->
    </script>


    </head>
    <body>

    <?php
    $temp 
    =array("uno""due");
    echo 
    "<form>";

    echo 
    "<select name='c' onchange=\"funzionejs($temp)\"><option value='0'>genere</option>";


    echo 
    "</form>";


    ?>

    </body>
    </html>
    questo non funziona, e restituisce ovviamente la select così


    Codice PHP:
    <select name='c' onchange="funzionejs(Array)"><option value='0'>genere</option
    visto che $temp è un array e se vuoi tirare fuori il valore devi specificare un indice
    esempio $temp[0]...

    Ora, per accedere ad entrambi dovresti ad esempio fare un ciclio, ma assegnare i value alle select...

    esempio

    Codice PHP:

    <html>
    <title>Titolo</title>

    <head>

    <script type="text/javascript">
    <!--

    function funzionejs(x)
    {

    for (i=0;i<x.length;i++){
    alert(x[i]);
    }
    }

    // -->
    </script>


    </head>
    <body>

    <?php
    $temp 
    =array("uno""due");
    echo 
    "<form>";

    echo 
    "<select name='c' onchange=\"funzionejs(this.value)\">";
    foreach(
    $temp as $t)
    {
        echo 
    "<option value='$t'>$t</option>";
    }
    echo 
    "</select>";


    echo 
    "</form>";


    ?>

    </body>
    </html>
    Antonio Correnti
    www.resetstudio.it

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    542

    param array a javascript

    Ti ringrazio dell'aiuto, periò io devo passare alla funzione javascript l'intero array e non solo il value dell'elemento selezionato.

    E' possibile?

    Grazie infinite
    Guidino

  6. #6
    Certo prova così e fammi sapere...
    Ovviamente per funzionare l'onchange devi avere almeno due option nella select...

    Codice PHP:
    <html>
    <title>Titolo</title>

    <head>

    <script type="text/javascript">
    <!--

    function funzionejs(x)
    {

    for (i=0;i<x.length;i++){
    alert(x[i]);
    }
    }

    // -->
    </script>


    </head>
    <body>

    <?php
    $temp 
    =array("uno""due");
    //formatto l'array per js
    $jsar="[";
    foreach (
    $temp as $t)
    {
        
    $jsar.="'$t',";
    }
    $jsar=substr($jsar,0,-1)."]"//tolgo la virgola alla fine e chiudo l'array

    echo "<form>";

    echo 
    "<select name='c' onchange=\"funzionejs($jsar)\"><option value='0'>genere</option><option value='1'>benere</option></select>";


    echo 
    "</form>";


    ?>

    </body>
    </html>
    Antonio Correnti
    www.resetstudio.it

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    542

    Array

    Grazie dell'aiuto.
    A me non funziona. Ovviamente ho messo almeno due select, come nel tuo esempio.

    Eppure ci deve essere un modo!

    Tu hai provato il codice?

    Guidino

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    542

    Array

    Correggo il testo del messaggio.
    Volevo dire che nella select ho messo almeno due option.

    Grazie
    Guidino

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    542

    array

    Ho provato il tuo codice.

    $mesi = array("gennaio","febbraio","marzo");

    //$mesi_js='['.implode(',',array_map('quot',$mesi)).'];';
    //formatto l'array per js
    $jsar="[";
    foreach ($mesi as $t)
    {
    $jsar.="'$t',";
    }
    $jsar=substr($jsar,0,-1)."]"; //tolgo la virgola alla fine e chiudo l'array


    se faccio:
    echo $jsar[0];
    echo $jsar[1];
    echo $jsar[2];
    echo count($jsar);

    restituisce: ['g1
    quindi il loop foreach prende solo il primo carattere e compone un solo elemento. L'array javascript non è corretto e la funzione javascript non va.

    Comunque grazie dell'aiuto.
    debuggando piano piano ci arrivo.
    Guidino

  10. #10
    Sbagli concettualmente l'utilizzo del mio script.
    Prima devi capire lo scopo di php e di javascript in generale come linguaggi.

    Lo scopo finale del php in ambito web server è solitamente "sparare", "printate" codice html.
    Il javascript invece viene eseguito dal client, quindi dal web browser, e non puoi semplicemente passare come fai tu una variabile php nel js.
    esempio non puoi:
    Codice PHP:
    <img onclick="loadme($var)"/> oppure <img onclick="loadme(<?php $var?>)"/>
    l'unico modo per passare una variabile è capire come funziona il caricamento di una pagina web.

    1. il browser richiede al server una pagina.
    2. se il web server riconosce che la pagina debba essere prima processata (esempio se è .php o .asp) vengono fatti tutti i calcoli, tutte le query e viene preparata una pagina html priva di codice php (prova a fare visualizza sorgente in una pagina php dopo che ha caricato noterai che tutto il codice php eseguito scompare lasciando nel codice solo i risultati dei vari print e echo)
    3. la pagina viene inviata la client che se la carica dovutamente
    4. il codice js, gli eventi del mouse etc vengono eseguiti.

    dove risiede il problema?

    Il problema è che tu non puoi semplicemente fare
    Codice PHP:
    <?php
    $ar
    =array(1,2,3,4,5);
     echo 
    "<img onclick='funzionemia($ar)'/>";
    ?>
    perchè così facendo non passi al js il contenuto dell' array php come potresti pensare, ma l'output di echo $ar; quindi Array().
    in definitiva una volta caricata la pagina avrai
    Codice PHP:
    <img onclick='funzionemia(Array())'/> 
    che per javascript nulla vuol dire, non gli stai passando nessun valore.


    Cosa fa quindi la funzione che avevo scritto?

    Codice PHP:
    function arTojsar($ar)
    {
        
    $jsar="[";
        foreach (
    $temp as $t)
        {
            if(
    is_string($t))$jsar.="'$t',";
            else 
    $jsar.="$t,";
        }
        
    $jsar=substr($jsar,0,-1)."]"//tolgo la virgola alla fine e chiudo l'array
        
    return $jsar;

    utilizzo:

    Codice PHP:
    $ar=array(1,2,"tre",4,5); //creo un array, non supporta gli array associativi, o almeno, ne perde le chiavi (si dovrebbe usare un'altra sintassi)

    $jsar=arTojsar($ar);

    //adesso, facendo

    echo $jsar//restituisce [1,2,'tre',4,5] questo è il sistema con cui si definiscono gli array in js

    //adesso, avendo

    echo "<img onclick='funzionemia($jsar)'/>"//mi da come output <img onclick='funzionemia([1,2,'tre',4,5])'/>

    //quindi passerà un vero array js costruito da quello php 
    C'è da dire che questo sistema o funzione, restituisce una STRINGA non un array,
    quindi è ovvio che se dato l'array

    array("gennaio","febbraio","marzo");
    restituisce la stringa ['gennaio','febbraio','marzo']

    echo $jsar[0]; //stampa il primo carattere della stringa cioè [
    echo $jsar[1]; //stampa il secondo carattere della stringa cioè '
    echo $jsar[2]; //stampa il terzo carattere cioè g
    echo count($jsar); conta gli elementi della variabile e li stampa, quindi 1

    senza a capi quindi ['g1

    Spero di essere stato chiaro, e scusa se ti sono sembrato arrogante, ma volevo spiegare bene questo concetto, fammi sapere
    Antonio Correnti
    www.resetstudio.it

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.