Diferència entre revisions de la pàgina «JQUERY - AJAX»

De wikiserver
Dreceres ràpides: navegació, cerca
(Exercicis)
(Solucions)
 
(27 revisions intermèdies per 2 usuaris que no es mostren)
Línia 1: Línia 1:
 
== Jquery i AJAX ==
 
== Jquery i AJAX ==
http://codehero.co/jquery-desde-cero-ajax/
+
 
 +
'''VIDEOTUTORIAL'''
 +
 
 +
https://youtu.be/yzhdVgxJbrQ
 +
 
  
 
jQuery soporta AJAX permetent abstraer les diferencies que poden existir entre els navegadors. Els mètodes que podem utilitzar son:
 
jQuery soporta AJAX permetent abstraer les diferencies que poden existir entre els navegadors. Els mètodes que podem utilitzar son:
Línia 31: Línia 35:
 
         // la resposta es pasada com argument a la funció
 
         // la resposta es pasada com argument a la funció
 
         success : function(json) {
 
         success : function(json) {
             $('<h1/>').text(json.title).appendTo('body');
+
             $('h1').text(json);
            $('<div class="content"/>')
 
                .html(json.html).appendTo('body');
 
 
         },
 
         },
 
      
 
      
Línia 100: Línia 102:
  
 
<source lang="java">
 
<source lang="java">
    $("button").click(function(){
+
  $("button").click(function () {
        $.get("./dades.php?name=julio&city=valencia", function(data, status){
+
                $.get("./datos.php?name=julio&city=valencia", function (data, status) {
            alert("Data: " + data + "\nStatus: " + status);
+
                    alert("Data: " + data + "\nStatus: " + status);
        });
+
                });
    });
+
  });
  
 
</source>
 
</source>
Línia 126: Línia 128:
  
 
<source lang="java">
 
<source lang="java">
  $("button").click(function(){
+
  $("button").click(function () {
        $.post("dades.php",
+
                $.post("datos.php", {
        {
+
                        nom: "Julio",
          nom: "Julio",
+
                        ciutat: "Valencia"
          ciutat: "Valencia"
+
                    },
        },
+
                    function (data, status) {
        function(data,status){
+
                        alert("Data: " + data + "\nStatus: " +   status); //data muestra los datos recibidos y muestra el estado  
            alert("Data: " + data + "\nStatus: " + status);   //data muestra los datos recibidos y muestra el estado  
+
                    });
        });
+
            });
 
</source>
 
</source>
  
Línia 140: Línia 142:
 
<source lang="php">
 
<source lang="php">
 
<?php
 
<?php
if(isset($_POST["name"]) && isset($_POST["city"])){
+
if(isset($_POST["nom"]) && isset($_POST["ciutat"])){
     $nom = $_POST["name"];
+
     $nom = $_POST["nom"];
     $cit = $_POST["city"];
+
     $cit = $_POST["ciutat"];
 
     echo $nom .  $cit;
 
     echo $nom .  $cit;
 
     exit;
 
     exit;
Línia 154: Línia 156:
  
 
<source lang="java">
 
<source lang="java">
$("button").click(function(){
+
$("button").click(function () {
        $.getScript("demo_ajax_script.js");
+
                $.getScript("demo_ajax_script.js");
    });
+
            });
  
  
Línia 175: Línia 177:
 
Els mètodes han de tenir els següents arguments, en ordre:
 
Els mètodes han de tenir els següents arguments, en ordre:
  
*url
+
*''url''
 +
 
 
La URL on es realitzarà la petició. El seu valor és obligatori.
 
La URL on es realitzarà la petició. El seu valor és obligatori.
  
*parámetres
+
*''parámetres''
 +
 
 
La informació que s'enviarà al servidor. El seu valor és opcional i pot ser tant un objecte com una cadena de dades (com foo=bar&baz=bim).
 
La informació que s'enviarà al servidor. El seu valor és opcional i pot ser tant un objecte com una cadena de dades (com foo=bar&baz=bim).
  
 
Nota: Aquesta opció no és correcte per al mètode $.getScript.
 
Nota: Aquesta opció no és correcte per al mètode $.getScript.
  
*success callback
+
*''success callback''
 +
 
 
Una funció opcional que s'executa en cas que petició hagi estat satisfactòria. Aquesta funció rep com a arguments la informació de la petició i l'objecte en brut d'aquesta petició.
 
Una funció opcional que s'executa en cas que petició hagi estat satisfactòria. Aquesta funció rep com a arguments la informació de la petició i l'objecte en brut d'aquesta petició.
  
*data type
+
*''data type''
 +
 
 
El tipus de dada que s'espera rebre des del servidor. El seu valor és opcional.
 
El tipus de dada que s'espera rebre des del servidor. El seu valor és opcional.
 
  
  
Línia 197: Línia 202:
 
<source lang="java">
 
<source lang="java">
  
$.getJSON( "pagina1.php", { "param" : "valor", "parametro2" : "valor" } )
+
$("button").click(function () {
    .done(function( data, textStatus, jqXHR ) {
+
                $.getJSON("datos.php", {
        if ( console && console.log ) {
+
                    "nombre": "Julio",
            console.log( "La solicitud se ha completado correctamente." );
+
                    "apellido": "Noguera"
        }
+
                })
    })
+
                .done(function (data, textStatus, jqXHR) {
    .fail(function( jqXHR, textStatus, errorThrown ) {
+
                    if (console && console.log) {
        if ( console && console.log ) {
+
                        console.log("La solicitud se ha completado correctamente.");
            console.log( "ha fallado"+textStatus);
+
                        console.log(data);  //devuelve objeto del servidor
        }
+
                        console.log(textStatus);    //devuelve 'success'
 +
                        console.log(jqXHR);  //objeto AJAX
 +
                    }
 +
                })
 +
                .fail(function (jqXHR, textStatus, errorThrown) {
 +
                    if (console && console.log) {
 +
                        console.log("ha fallado" + textStatus);
 +
                    }
  
});
+
                });
 +
            });
 
</source >
 
</source >
  
 +
//datos.php
 
<source lang="java">
 
<source lang="java">
 
+
<?php
 
$jsondata = array();
 
$jsondata = array();
  
if( isset($_GET['param']) ) {
+
if( isset($_GET['nombre']) ) {
  
     if( $_GET['param'] == 'valor' ) {
+
     if( $_GET['nombre'] == 'julio' ) {
  
 
         $jsondata['success'] = true;
 
         $jsondata['success'] = true;
Línia 233: Línia 247:
 
     echo json_encode($jsondata);
 
     echo json_encode($jsondata);
 
     exit();
 
     exit();
 +
}
 
</source>
 
</source>
  
Línia 279: Línia 294:
  
 
== Exercicis ==
 
== Exercicis ==
 +
 +
<!--
  
 
=== FOTOS ===
 
=== FOTOS ===
Línia 284: Línia 301:
 
Tenemos 100 álbumes con unas 5000 fotografias que hemos subido a internet, se debe mostrar el total de fotografias y de albumes. Debe existir unos botones de desplazamiento para poder recorrer las fotos atrás < y adelante > mostrando su descripción e imágenes. Además de existir un breve buscador por título.
 
Tenemos 100 álbumes con unas 5000 fotografias que hemos subido a internet, se debe mostrar el total de fotografias y de albumes. Debe existir unos botones de desplazamiento para poder recorrer las fotos atrás < y adelante > mostrando su descripción e imágenes. Además de existir un breve buscador por título.
 
http://jsonplaceholder.typicode.com/photos
 
http://jsonplaceholder.typicode.com/photos
<!--
+
 
 
=== Suma ===
 
=== Suma ===
Es tracta de crear un parell d'input dels quals s'introduiran valors numèrics que seran tractats en el servidor i tornarà la suma d'ells. Mentre es processa la informació haurà d'aparèixer un missatge de "processant ..." o pots crear la teva [http://www.ajaxload.info/ imatge de carrega].  
+
Es tracta de crear un parell d'input dels quals s'introduiran valors numèrics que seran tractats en el servidor i tornarà la suma d'ells. Mentre es processa la informació haurà d'aparèixer un missatge de "processant ..." o pots crear la teva  
 +
[https://blog.reaccionestudio.com/8-generadores-de-iconos-cargando-para-ajax/ imatge de carrega].  
 +
 
 +
 
 
:[[exercici ajax post]]
 
:[[exercici ajax post]]
  
Línia 292: Línia 312:
  
 
Mostra un missatge d'alerta per indicar que el JavaScript s'ha carregat des del servidor.
 
Mostra un missatge d'alerta per indicar que el JavaScript s'ha carregat des del servidor.
 +
 
:[[exercici missatge alerta]]
 
:[[exercici missatge alerta]]
  
Línia 297: Línia 318:
  
 
Volem cargar un fitxer txt a la nostra pàgina per tant el deurem afegir al nostre hosting per a evitar problemes.
 
Volem cargar un fitxer txt a la nostra pàgina per tant el deurem afegir al nostre hosting per a evitar problemes.
<!-- $('body').load( "http://hosting.infomerce.es/~jnoguera/jajax/merce.txt" );-->
+
 
 +
<source lang="php">
 +
$('body').load( "http://hosting.infomerce.es/~jnoguera/jajax/merce.txt" );
 +
</source>
  
 
===Taula Multiplicar I===
 
===Taula Multiplicar I===
  
 
Seleccionarem un número del 1 al 10, i el servidor ens calcularà la taula de multiplicar corresponent. Utilitzarem el mètode $.post() per passar la informació de quina taula de multiplicar volem veure.
 
Seleccionarem un número del 1 al 10, i el servidor ens calcularà la taula de multiplicar corresponent. Utilitzarem el mètode $.post() per passar la informació de quina taula de multiplicar volem veure.
 +
  
 
:[[solucio_multiplicar]]
 
:[[solucio_multiplicar]]
Línia 308: Línia 333:
  
 
En aquest cas també farem un sleep(1) en el fitxer php, i pintarem la imatge ajax_wait.gif mentre no estigui completa la petició.
 
En aquest cas també farem un sleep(1) en el fitxer php, i pintarem la imatge ajax_wait.gif mentre no estigui completa la petició.
 +
  
 
:[[solucio_mulitiplicar1]]
 
:[[solucio_mulitiplicar1]]
Línia 313: Línia 339:
 
=== Formulari ===
 
=== Formulari ===
 
En una consulta d'un dentista es vol registrar un nou client, es crearà un formulari amb nom, telèfon i un radi button que marcarà tard o demà. Aquestes dades s'enviaran al servidor i el servidor els tornarà en format JSON per mostrar-los en pantalla dues maneres. (JSON i tots els seus noms).
 
En una consulta d'un dentista es vol registrar un nou client, es crearà un formulari amb nom, telèfon i un radi button que marcarà tard o demà. Aquestes dades s'enviaran al servidor i el servidor els tornarà en format JSON per mostrar-los en pantalla dues maneres. (JSON i tots els seus noms).
 +
 
:[[solució formulari ajax]]
 
:[[solució formulari ajax]]
  
Línia 327: Línia 354:
 
'''Podeu trobar al moodle la solució d'aquest exercici'''
 
'''Podeu trobar al moodle la solució d'aquest exercici'''
  
 +
-->
  
-->
+
== Exercicis curs 2021-2022==
 +
 
 +
* Exercicis 4 i 6 d'AJAX amb JQuery
 +
 
 +
== Solucions ==
 +
 
 +
http://wikiserver.infomerce.es/index.php/Exercici4_axax_jquery
 +
 
 +
http://wikiserver.infomerce.es/index.php/Exercici6_axax_jquery

Revisió de 17:45, 27 abr 2022

Jquery i AJAX

VIDEOTUTORIAL

https://youtu.be/yzhdVgxJbrQ


jQuery soporta AJAX permetent abstraer les diferencies que poden existir entre els navegadors. Els mètodes que podem utilitzar son:

  • $.get()
  • $.getScript()
  • $.getJSON()
  • $.post()
  • $.load()

Però tots ells estan basats en el mètode:

  • $.ajax()

$.ajax()

El mètode $.ajax és configurat a través d'un objecte, el qual conté totes les instruccions que necessita jQuery per completar la petició. Aquest mètode és particularment útil a causa que ofereix la possibilitat d'especificar accions en cas que la petició hagi fallat o no. A més, en estar configurat a través d'un objecte, és possible definir les seves propietats de forma separada, fent que sigui més fàcil la reutilització del codi. Pot visitar http://api.jquery.com/jquery.ajax/ per consultar la documentació sobre les opcions disponibles en el mètode. Exemple:

$.ajax({
        // la URL de la petició
        url : 'post.php',
    
        //informació a enviar
        // (també es posible utilitzar una cadena de dades)
        data : { id : 123 },
    
        // especificar si será una petició POST o GET
        type : 'GET',
    
        // el tipus d'informació que s'espera de resposta
        dataType : 'json',
    
        // codi a executar si la petició es satisfactoria;
        // la resposta es pasada com argument a la funció
        success : function(json) {
            $('h1').text(json);
        },
    
        // codi a executar si la petició falla;
        // en pasen com arguments a la funció
        // l'objete jqXHR (extensió de XMLHttpRequest), un text amb l'estat
        // de la petició i un text amb la descripció del error que hagi donat el servidor
        error : function(jqXHR, status, error) {
            alert('hi ha un problema');
        },
    
        // codi a executar sense importar si la petició va fallar o no
        complete : function(jqXHR, status) {
            alert('Petición realizada');
        }
    });

El mètode $.ajax posseeix moltes opcions de configuració, i és justament aquesta característica la que fa que sigui un mètode molt útil. Per a una llista completa de les opcions disponibles, pot consultar http://api.jquery.com/jquery.ajax/; a continuació es mostren les més comunes:

Opcions Explicació
async Estableix si la petició serà asíncrona o no. De forma predeterminada el valor és true. Ha de tenir en compte que si l'opció s'estableix en false, la petició bloquejarà l'execució d'altres codis fins que aquesta petició hagi finalitzat.
jqXHR es un objeto jqXHR que contiene todos los datos de la solicitud Ajax realizada, incluyendo la propiedad jqXHR.status que contiene, entre otros posibles, el código de estado HTTP de la respuesta.
textStatus texto que describe el tipo de error, que puede ser, además de null, “abort”, “timeout”, “No Transport” o "parseerror".
errorThrown si hay un error HTTP, errorThrown contiene el texto de la cabecera HTTP de estado. Por ejemplo, para un error HTTP 404, errorThrown es “Not found”; para error un HTTP 500 es “Internal Server Error”.
beforeSend una funció que s'ha d'executar abans de l'enviament de la consulta.Això permet modificar l'objecte XMLHttpRequest abans que s'enviï per especificar, per exemple, encapçalats HTTP personalitzats.
cache Estableix si la petició serà guardada en la cache del navegador. De forma predeterminada és true para tots els dataType excepte para “script” i “jsonp”. Quan posseeix el valor false, s'agrega una cadena de caràcters anti-cache al final de la URL de la petició.
complete Estableix una funció de devolució de trucada que s'executa quan la petició aquesta completa, encara que hagi fallat o no. La funció rep com a arguments l'objecte jqXHR (en versions anteriors o iguals a jQuery 1.4, rep en el seu lloc l'objecte de la petició en cru XMLHTTPRequest) i un text especificant l'estatus de la mateixa petició (success, notmodified, error, timeout, abort, o parsererror).
context Estableix l'abast en què la/les funcionis de devolució de trucada s'executessin (per exemple, defineix el significat de this dins de les funcions). De manera predeterminada this fa referència a l'objecte originalment passat al mètode $.ajax.
data Estableix la informació que s'enviarà al servidor. Aquesta pot ser tant un objecte com una cadena de dades (per exemple foo=bar&baz=bim.)
dataType una cadena de caracteres que especifica el formato de los datos que se enviarán por el servidor (xml, html, json o script). Si no se especifica nada, jQuery usa el tipo MIME para determinar el formato adecuado: responseXML o ResponseText . Los tipos disponibles son:
  • xml: devuelve un documento XML que podrá tratarse con jQuery.
  • html: devuelve código Html en formato texto.
  • script: evalúa la respuesta en JavaScript y la devuelve en formato texto.
  • json: evalúa la respuesta en JSON y devuelve un objeto JavaScript.
error Estableix una funció de devolució de trucada (CALLBACK) a executar si resulta algun error en la petició. Aquesta funció rep com a arguments l'objecte jqXHR (en versions anteriors o iguals a jQuery 1.4, rep en el seu lloc l'objecte de la petició en cru XMLHTTPRequest), un text especificant l'estatus de la mateixa petició (timeout, error, abort, o parsererror) i un text amb la descripció de l'error que hagi enviat el servidor (per exemple Not Found o Internal Server Error).
jsonp Estableix el nom de la funció de devolució de trucada a enviar quan es realitza una petició JSONP.
succes Estableix una funció a executar si la petició a estat satisfactòria. Aquesta funció rep com a arguments l'objecte jqXHR (en versions anteriors o iguals a jQuery 1.4, rep en el seu lloc l'objecte de la petició en cru XMLHTTPRequest), un text especificant l'estatus de la mateixa petició i la informació de la petició (convertida a objecte Javascript en el cas que dataType sigui JSON), l'estatus de la mateixa.
timeout Estableix un temps en mil·lisegons per considerar a una petició com fallada
traditional Si el seu valor és true, s'utilitza l'estil de serialización de dades utilitzat abans de jQuery 1.4. Per a més detalls pot visitar http://api.jquery.com/jquery.param/.
type una cadena de caràcters que defineix el mètode HTTP que es va a utilitzar per la consulta (GET o POST). El valor per defecte és GET. Es poden usar altres mètodes d'enviament HTTP, com PUT o DELETE, però no estan suportats per tots els navegadors.
url Estableix la URL on es realitza la petició. L'opció url és obligatòria per al mètode $.ajax;

Dreceres

Addicionalment a la funció AJAX, jQuery proveeix altres funcions per a usos més específics i estalviar-nos escriure unes quantes línies de codi:

Realitza una petició GET a una URL proveïda.

$("button").click(function () {
                $.get("./datos.php?name=julio&city=valencia", function (data, status) {
                    alert("Data: " + data + "\nStatus: " + status);
                });
  });

//dades.php

<?php
if(isset($_GET["name"]) && isset($_GET["city"])){
    $nom = $_GET["name"];
    $cit = $_GET["city"];
    echo $nom .  $cit;
    exit;
}
echo "ERROR";
?>

Realitza una petició POST a una URL proveïda.

$("button").click(function () {
                $.post("datos.php", {
                        nom: "Julio",
                        ciutat: "Valencia"
                    },
                    function (data, status) {
                        alert("Data: " + data + "\nStatus: " +   status); //data muestra los datos recibidos y muestra el estado 
                    });
            });

//dades.php

<?php
if(isset($_POST["nom"]) && isset($_POST["ciutat"])){
    $nom = $_POST["nom"];
    $cit = $_POST["ciutat"];
    echo $nom .  $cit;
    exit;
}
echo "ERROR";
?>
  • $.getScript

Afegeix un script a la pàgina.

$("button").click(function () {
                $.getScript("demo_ajax_script.js");
            });


//una altra forma
$("button").click(function(){
$.getScript('/static/js/myScript.js', function() {
        functionFromMyScript();
});
  • $.getJSON

Realitza una petició GET a una URL proveïda i espera que una dada JSON sigui retornat.

           $.getJSON([url], [parámetres], [funció que rep les dades])

Els mètodes han de tenir els següents arguments, en ordre:

  • url

La URL on es realitzarà la petició. El seu valor és obligatori.

  • parámetres

La informació que s'enviarà al servidor. El seu valor és opcional i pot ser tant un objecte com una cadena de dades (com foo=bar&baz=bim).

Nota: Aquesta opció no és correcte per al mètode $.getScript.

  • success callback

Una funció opcional que s'executa en cas que petició hagi estat satisfactòria. Aquesta funció rep com a arguments la informació de la petició i l'objecte en brut d'aquesta petició.

  • data type

El tipus de dada que s'espera rebre des del servidor. El seu valor és opcional.


Nota

Aquesta opció és solament aplicable per a mètodes en què no està especificat el tipus de dada en el nom del mateix mètode. Exemples:

$("button").click(function () {
                $.getJSON("datos.php", {
                    "nombre": "Julio",
                    "apellido": "Noguera"
                })
                .done(function (data, textStatus, jqXHR) {
                    if (console && console.log) {
                        console.log("La solicitud se ha completado correctamente.");
                        console.log(data);  //devuelve objeto del servidor
                        console.log(textStatus);    //devuelve 'success'
                        console.log(jqXHR);   //objeto AJAX
                    }
                })
                .fail(function (jqXHR, textStatus, errorThrown) {
                    if (console && console.log) {
                        console.log("ha fallado" + textStatus);
                    }

                });
            });

//datos.php

<?php
$jsondata = array();

if( isset($_GET['nombre']) ) {

    if( $_GET['nombre'] == 'julio' ) {

        $jsondata['success'] = true;
        $jsondata['message'] = 'Hola! El valor recibido es correcto.';

    } else {

        $jsondata['success'] = false;
        $jsondata['message'] = 'Hola! El valor recibido no es correcto.';

    }

    //Aunque el content-type no sea un problema en la mayoría de casos, es recomendable especificarlo
    header('Content-type: application/json; charset=utf-8');
    echo json_encode($jsondata);
    exit();
}

$.load()

El mètode $(selector).load() és l'únic que es pot cridar des d'una selecció. Aquest mètode obté el codi HTML d'una URL i als elements seleccionats els modifica amb la informació obtinguda.

$(document).ready(function(){
    $("button").click(function(){
        $("#div1").load("demo_test.txt");
    });
});


$(document).ready(function(){
    $("button").click(function(){
        $("#div1").load("ejemplo.html #p1");      //carga la web e inserta su contenido dentro de #div1
    });
});
$(document).ready(function(){
    $("button").click(function(){
        $("#div1").load("demo_test.txt", function(){
           alert("External content loaded successfully!");
         });
    });
});

Events AJAX ajaxStart ajaxStop

Sovint, voldrà executar una funció quan una petició hagi començat o acabat, com per exemple, mostrar o ocultar un indicador. En lloc de definir aquestes funcions dins de cada petició, jQuery proveeix la possibilitat de vincular esdeveniments Ajax a elements seleccionats. Per a una llista completa d'esdeveniments Ajax, pot consultar http://docs.jquery.com/ajax_events.

AjaxStart(): Assigna una funció que s'ha d'executar quan comença una consulta AJAX.

AjaxStop(): Assigna una funció que s'executarà cada vegada que acaba una consulta.

$(document)
        .ajaxStart(function() { $('#loading_indicator').show(); })
        .ajaxStop(function() { $('#loading_indicator').hide(); });

Podeu obtenir imatges per mostrar com a indicadors a: http://www.ajaxload.info/

Exercicis

Exercicis curs 2021-2022

  • Exercicis 4 i 6 d'AJAX amb JQuery

Solucions

http://wikiserver.infomerce.es/index.php/Exercici4_axax_jquery

http://wikiserver.infomerce.es/index.php/Exercici6_axax_jquery