Risposta ajax -> json con php

otto9due

Utente Attivo
22 Feb 2014
591
25
28
Il mio obiettivo è quello di fare una richiesta ajax in post da "index.php" ad una pagina "richiamo.php" ( la richiesta è contenuta nel file script.js che vedete sotto ). Quello che vorrei ottenere come risultato è che fatta la richiesta la pagina richiamo.php produca un json_encode($arr); in questo caso quindi encode della mia array, che verrà poi trasmessa alla index.php.
Volendola usare con php poi, devo riuscire ricevuta quest'array codificata, decodificarla tramite php nuovamente trasformandola ed utilizzandola quindi come una normale array.
In pratica usare ajax come un semplice mezzo di trasporto dati.

Ho scritto questi file ma non ottengo ne il risultato sperato ne errori:

richiamo.php
PHP:
<?php
    if(isset($_POST['action']) && !empty($_POST['action'])) {
        $arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
        $data = json_encode($arr);

        echo $data;
    }
?>

index.php
PHP:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="script.js"></script>
<title>Documento senza titolo</title>
</head>

<body>
    <button id="#but">Prova</button>
    <div id="out"></div>
</body>
</html>

script.js
Codice:
$(document).ready(function () {
    $("#but").click(function () {
        $.ajax({
            type: "POST",
            url: "richiamo.php",
            data: {action: 'test'},
            dataType: 'JSON',
            success: function (response) {
                var esc = JSON.stringify(response);
                console.log(esc);
            },
            error: function (xhr, ajaxOptions, thrownError) {
                alert(xhr.status);
                alert(thrownError);
            }
        });
    });
});

Ringrazio anticipatamente per l'aiuto.
Saluti G.G.
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
In pratica usare ajax come un semplice mezzo di trasporto dati.

- interpreto, perchè non so se ho capito bene,

- un php mi fornisce dei dati in un'array
- una pagina html con javascript, riceve l'array, codificata json, dallo script php via ajax
- converte la stringa che sta transitando, per poter usare l'array anche nella pagina html (se serve)
- invia, via ajax, la string (json) ad un secondo script php che la riceve e la usa
- oppure con "POST" (submit) passa i valori ad uno script php che li gestisce ... (non nell'esempio)

PHP:
<?php
// esempio_8_CreateArray.php

$data = array
(
    'foo'  => 123,
    'bar'  => 456,
    'rows' => array
    (
        0 => array
        (
            'column1' => 'hello',
            'column2' => 'hola',
            'column3' => 'bonjour',
        ),
        1 => array
        (
            'column1' => 'goodbye',
            'column2' => 'hasta luego',
            'column3' => 'au revoir',
        ),
        2 => array
        (
            'column1' => 'hello',
            'column2' => 'hola',
            'column3' => 'bonjour',
        ),
        3 => array
        (
            'column1' => 'goodbye',
            'column2' => 'hasta luego',
            'column3' => 'au revoir',
        ),
    ),
    'test1' => array
    (
        'test2' => array
        (
            'test3' => 'abcdef'
        )
    )
);

echo json_encode($data);
?>

HTML:
<!DOCTYPE html>
<html>
    <head>
        <!-- esempio_8__DataTransferByAjax.html -->

        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>jQuery AJAX array transfer</title>

        <script type="text/javascript" src="jquery.min.js"></script>

        <script type="text/javascript">

$(document).ready(function()
{
    $('#myButton').bind("click",function()
    {
        alert( "Handler for .click() called." );

        var risultato;

        $.ajax
        ({
            type:    'post',
            cache:   false,
            url:     'esempio_8_CreateArray.php',
            success: function(response)
            {
                risultato = response;
                alert(risultato);

                var dataJ = JSON.parse(risultato);
                alert(dataJ['foo']+' - '+dataJ['test1']['test2']['test3']);

                invio_successivo();
            },
            error: function() { alert('errore esecuzione esempio_8_CreateArray.php'); }
        });

        function invio_successivo()
        {
            $.ajax
            ({
                type:    'post',
                cache:   false,
                url:     'esempio_8_DisplayArray.php',
                data:
                {
                    data : risultato
                },
                success: function(response)
                {
                    $('#myDiv').html(response);
                },
                error: function() { alert('errore esecuzione esempio_8_DisplayArray.php'); }
            });
        }
    });
});
        </script>
    </head>
    <body>
        <input id="myButton" type="button" style="width: 130px; height: 60px" value="esegui AJAX" />
        <br /> <br />
 <div id="myDiv"> </div>
    </body>
</html>

PHP:
<?php
// esempio_8_DisplayArray.php

$data = json_decode($_POST['data']);

var_dump($data);
?>
upload_2017-9-1_17-10-58.png

upload_2017-9-1_17-11-38.png

upload_2017-9-1_17-12-6.png

upload_2017-9-1_17-12-45.png
 

otto9due

Utente Attivo
22 Feb 2014
591
25
28
Innanzitutto grazie per la risposta e per la disponibilità. Non ho risposto subito poichè avevo risolto in altro modo, ma a questo punto vorrei capirci qualcosa in più, colgo l'occasione per approfondire, se non ti dispiace.
Allora, il mio dubbio è questo: le richieste ajax possono essere fare sia con javascript che tramite la sua libreria jquery giusto?
Io ho fatto come nell'esempio sotto alla fine, in pratica cosa ho fatto e cosa ho utilizzato per la richiesta?
Codice:
$( document ).ready(function() {
    $("button#but").click(function () {
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.onreadystatechange = function () {
            if (this.readyState === 4 && this.status === 200) {
                var arr = JSON.parse(this.responseText);
                $("#out").html(arr["c"]);
            }
        };
        xmlhttp.open("post", "http://dev.miosito.com/jebo/test/richiamo.php", true);
        xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xmlhttp.send("prova=test123&cc=prova2");
    });
});

Farò altre prove tramite $.ajax(), sperando di riuscire anche così, perchè ancora quello non mi riesce.
 

otto9due

Utente Attivo
22 Feb 2014
591
25
28
Mi sa che ho capito il problema.. In pratica quello che generava il blocco dello script era il
Codice:
dataType: "json",
Togliendo questa parte, in questo modo, funge..
Codice:
$(document).ready(function () {
    $("button#but").click(function () {
        $.ajax
            ({
                type: "POST",
                url: 'http://dev.miosito.com/jebo/test/richiamo.php',
                cache: false,
                data: "prova=test123&cc=prova2",
                success: function (response)
                {
                    var arr = JSON.parse(response);
                    $("#out").html(arr["c"]);
                },
                error: function () {
                    alert('errore esecuzione richiamo.php');
                }
            });
    });
});

Grazie per l'aiuto, ma se qualcuno mi spiegasse bene come funziona il tutto, sarebbe molto gradito.
 
Discussioni simili
Autore Titolo Forum Risposte Data
WorldWideWeb Ajax POST con risposta JSON Ajax 2
localhost.nicola [AJAX-JQUERY] Ritornare true||false in base alla risposta ricevuta da success: di $.ajax() Ajax 1
S Eseguire funzione jquery all'interno della risposta ajax Ajax 0
M Visualizzare nuove domande in base a risposta precedente PHP 0
F Problema con risposta PHP 0
M Inviare dati nel db dopo risposta alert PHP 0
B [Java] Paginazione in risposta HTTP Java 0
D [PHP] script che invii una mail automatica dopo risposta ad una discussione di un forum PHP 0
B [PHP] Scrivere risposta multipla in database PHP 1
C [PHP] Campo facoltativo del form che non deve risultare nella risposta se negativo PHP 6
G PHP Nessuna risposta PHP 3
C [PHP] Risposta a discussione forum PHP 7
Michaelweb93 [HTML] Creazione risposta automatica - email "Contact form 7" Wordpress WordPress 10
C Parser di una risposta soap XML 0
ecosito [WORDPRESS] Lentezza (in attesa di risposta da www.......) WordPress 18
ANDREA20 [PHP] Buongiorno!!! potrei ricevere una risposta anch'io o no? PHP 7
A Cambiare Risposta onclick con Switch. Javascript 1
Benix89 Modulo per pagamento con la risposta ad alcune domande Magento 1
Benix89 Modulo per pagamento con la risposta ad alcune domande PHP 2
M Ipn paypal problema nella risposta PHP 1
P validazine input e risposta input Ajax 11
IImanuII Tempo per una risposta. PHP 20
S creazione test con invio risposta a una email prescelta PHP 4
V sono 3 anni che aspetto una risposta Flash 0
C Form con risposta PHP 2
M [Risolto]Problema con risposta json Sviluppo app per Android 6
P risposta form con testo PHP 11
P problema form senza pagina di risposta PHP 15
helpdesk nessuna risposta dalla query di selct PHP 5
catellostefano shell rmdir .... risposta directory not empty Linux e Software 5
catellostefano Perplessità sulla risposta di apache su linux Apache 19
I Script risposta breve Javascript 0
minatore messaggio di risposta PHP 2
V Aiuto PHP restiture una risposta in base al numero visitatore PHP 0
P Risposta personalizzata PHP 2
G ricevere una email dal web e inviare una risposta con allegato Classic ASP 2
K Test a Risposta Multipla PHP 0
I Risposta in automatico da Outlook. Windows e Software 1
icebracker risposta con codice HTML e CSS 10
cerbero risposta cn script, stavolta rispondetemi xo! Javascript 6
T Form con Risposta Automatica PHP 1
M Al Primo Senza Risposta...ora Ci Riprovo Non Si Sa Mai :-) Flash 1
4 messaggi di risposta!! HTML e CSS 4
R valore value di un id da passare in chiamata ajax Ajax 3
R jquery che cambia css di un elemento non mi funziona sulla pagina caricata da ajax Ajax 5
M Fullcalendar in Codeigniter, un aiuto per la chiamata $ajax ? jQuery 0
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
P Funzione jQuery Ajax invio file a php jQuery 1
E Php select option e ajax PHP 23
Emix Select concatenate php sql ajax PHP 2

Discussioni simili