Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    Elaborare dati da form ajax

    ciao!

    tramite ajax invio i dati di un form a uno script php:
    codice:
            $("#frm_ordini").submit(function (event) {
                event.preventDefault();
    
                var values = $(this).serialize();
                $.ajax({
                    type: "POST",
                    dataType: "html",
                    url: '../' + urlAjax + "assegnazioni.php",
                    data: {values: values},
                    beforeSend: function (xhr) {
    //                    $('#modal_wait').modal('show');
                    }
                }).done(function (res) {
                    console.log(res);
                    $('#modal_wait').modal('hide');
                }).fail(function (err) {
                    $('#modal_wait').modal('hide');
                    alert("ERRORE: " + err);
                });
            });
    allo script i dati arrivano così:
    codice:
    string(1153) "arr_rigord_id=459627&arr_rigord_qta=5&arr_ass=0&arr_rigord_id=459628&arr_rigord_qta=10&arr_ass=0&arr_rigord_id=459629&arr_rigord_qta=10&arr_ass=0&arr_rigord_id=459630&arr_rigord_qta=5&arr_ass=0&arr_rigord_id=459631&arr_rigord_qta=5&arr_ass=0&arr_rigord_id=459632&arr_rigord_qta=3&arr_ass=0&arr_rigord_id=473374&arr_rigord_qta=2&arr_ass=0&arr_rigord_id=473375&arr_rigord_qta=2&arr_ass=0&arr_rigord_id=473376&arr_rigord_qta=2&arr_ass=0&arr_rigord_id=473377&arr_rigord_qta=2&arr_ass=0&arr_rigord_id=473378&arr_rigord_qta=2&arr_ass=0&arr_rigord_id=473379&arr_rigord_qta=2&arr_ass=0&arr_rigord_id=483778&arr_rigord_qta=1&arr_ass=0&arr_rigord_id=483779&arr_rigord_qta=1&arr_ass=0&arr_rigord_id=483780&arr_rigord_qta=1&arr_ass=0&arr_rigord_id=483781&arr_rigord_qta=1&arr_ass=0&arr_rigord_id=483782&arr_rigord_qta=1&arr_ass=0&arr_rigord_id=483783&arr_rigord_qta=1&arr_ass=0&arr_rigord_id=487470&arr_rigord_qta=1&arr_ass=0&arr_rigord_id=487471&arr_rigord_qta=1&arr_ass=0&arr_rigord_id=487472&arr_rigord_qta=1&arr_ass=0&arr_rigord_id=487473&arr_rigord_qta=1&arr_ass=0&arr_rigord_id=487474&arr_rigord_qta=1&arr_ass=0&arr_rigord_id=487475&arr_rigord_qta=1&arr_ass=0"
    come vedete ci sono tre campi, con valori sempre diversi (il form è creato con valori presi da db).
    i tre campi li devo processare insieme:
    codice:
    arr_rigord_id=459627&arr_rigord_qta=5&arr_ass=0
    arr_rigord_id=459628&arr_rigord_qta=10
    ecc...
    secondo voi come faccio ad spezzare questa stringa per elaborare i campi come mi servono??

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    783
    Potresti usare explode() per dividere la stringa ottenendo un array con i vari parametri.

    A questo punto avresti un array che volendo potresti dividere in gruppi di tre con array_chunk()

  3. #3
    Quote Originariamente inviata da M4V1 Visualizza il messaggio
    Potresti usare explode() per dividere la stringa ottenendo un array con i vari parametri.

    A questo punto avresti un array che volendo potresti dividere in gruppi di tre con array_chunk()
    ciao!

    sto seguendo il tuo suggerimento:
    Codice PHP:
    <?php

    $values 
    $_POST['values'];
    $valExpl explode("&"$values);
    $arrValues array_chunk($valExpl3);

    var_dump($arrValues);
    come risultato da una cosa del genere:
    codice:
    array(285) {
      [0]=>
      array(3) {
        [0]=>
        string(20) "arr_rigord_id=459671"
        [1]=>
        string(17) "arr_rigord_qta=10"
        [2]=>
        string(9) "arr_ass=0"
      }
      [1]=>
      array(3) {
        [0]=>
        string(20) "arr_rigord_id=459670"
        [1]=>
        string(17) "arr_rigord_qta=10"
        [2]=>
        string(9) "arr_ass=0"
      }
    ...............................
    se ho fatto tutto corretto, a questo punto dovrei usare explode su ogni valore dell'array all'altezza dell'uguale per prendere il valore.
    corretto??

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    783
    Si puoi farlo in quel modo, però ora che vedo meglio il codice forse ti risulterebbe più semplice farti inviare i dati come:

    codice HTML:
    contentType: 'application/json',
    dalla funzione ajax e lavoraci in php leggendo i dati json con json_decode()

  5. #5
    ho provato così con json, ma poi stampa un solo record in php:
    codice:
            $("#frm_ordini").submit(function (event) {
                event.preventDefault();
    
                var values = $(this).serialize();
                $.ajax({
                    type: "POST",
                    url: '../' + urlAjax + "assegnazioni.php",
                    data: values,
                    dataType: 'json',
                    beforeSend: function (xhr) {
                        $('#modal_wait').modal('show');
                    }
                }).done(function (res) {
                    console.log(res);
                    $('#modal_wait').modal('hide');
    //                window.location.reload(true);
                }).fail(function (err) {
                    $('#modal_wait').modal('hide');
                    alert("ERRORE: " + err);
                });
            });
    lato php:
    Codice PHP:
    <?php

    echo json_encode($_POST);

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    783
    Hai fatto un po' di confusione, anche per colpa mia che ti ho dato poche info, in ogni caso lascia stare json.

    Per farlo con json in pratica dovresti creare una stringa json tramite js e poi inviarla a php.
    Di fatto cambia solo dove vengono processati i dati, se ti trovi meglio con php fallo con gli explode(), il risultato è lo stesso.

  7. #7
    Quote Originariamente inviata da M4V1 Visualizza il messaggio
    Hai fatto un po' di confusione, anche per colpa mia che ti ho dato poche info, in ogni caso lascia stare json.

    Per farlo con json in pratica dovresti creare una stringa json tramite js e poi inviarla a php.
    Di fatto cambia solo dove vengono processati i dati, se ti trovi meglio con php fallo con gli explode(), il risultato è lo stesso.
    si conosco json!
    mi sono solo rifatto ad uno dei miliardi di esempi online (con alcune piccole varianti).
    in ogni caso, tutti gli esempi trovati, non mi hanno funzionato.
    quindi, o qualcosa mi sfugge, o devo cambiare modalità di creazione del json.

  8. #8
    serialize() di jQuery non invia necessariamente un stringa al server.
    Puoi simulare un invio del tutto identico al normale invio del form, e recuperare i dati comodamente senza fare split.

    Ti posto un esempio.

    codice:
    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <title>Non string post data</title>
    <script src="http://ajax.googleapis.com/ajax/libs...n.js"></script>
    <script>
    $(function(){
     $('#the_form').submit(function(){
      $.ajax({
       type: "POST",
       url: "serialize.php",
       data: $(this).serialize(),
       cache: false,
       success: function(html){
        alert(html);
       }
      });
      return false;
     });
    });
    </script>
    </head>
    <body>
    <form method="post" id="the_form">
       <input name="item[0][id]" value="1"><br>
       <input name="item[0][name]" value="1name"><br>
       <input name="item[0][value]" value="1value"><br>
       <hr>
       <input name="item[1][id]" value="2"><br>
       <input name="item[1][name]" value="2name"><br>
       <input name="item[1][value]" value="2value"><br>
       <input type="submit" value="send">
    </form>
    </body>
    </html>
    serialize.php
    Codice PHP:
    <?php
    var_dump
    ($_POST['item']);
    ?>

  9. #9
    ciao!

    questo però preusppone che i nomi dei campi li imposti così:
    codice:
    <form method="post" id="the_form"> 
       <input name="item[0][id]" value="1"><br> 
       <input name="item[0][name]" value="1name"><br> 
       <input name="item[0][value]" value="1value"><br> 
       <hr> 
       <input name="item[1][id]" value="2"><br> 
       <input name="item[1][name]" value="2name"><br> 
       <input name="item[1][value]" value="2value"><br> 
       <input type="submit" value="send"> 
    </form>
    quindi con quell' item[0], ecc.
    però il mio form è costruito in maniera un pò più "complessa".
    ci sono due foreach innestati.
    dovrei cambiare un pò tutta la pagina.
    arrivato a questo punto, non so quanto mi convenga!

  10. #10
    Il metodo lo puoi applicare anche agli input con names "normali", non devi usare necessariamente gli array.
    Gli array nei names sono utili per strutturare i dati e facilitarne l'elaborazione, per l'indice dell'array item potresti usare un semplice progressivo valorizzato nel primo foreach. Quegli explode non sono eleganti, poi valuta tu se e come usare il metodo.
    Ultima modifica di lucavizzi; 07-02-2017 a 13:48

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.