JeuWeb - Crée ton jeu par navigateur
XML vs JSON - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : XML vs JSON (/showthread.php?tid=5238)



XML vs JSON - Myrina - 09-02-2011

Actuellement je traite les requêtes AJAX en renvoyant du XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<response>
<content destination="mon ID de destination">
<texte><![CDATA[mon texte ici à mettre dans la destination]]></texte>
</content>
</response>
j'ai prévu de l'étendre en rajoutant des attributs à "content", notamment un mode="insert|append".

Le problème de l'XML, c'est que c'est très verbeux donc j'aimerai pouvoir obtenir le même comportement en JSON. Dans ma version actuelle, ca ne pose pas trop de problème!

{"mon ID de destination":"mon texte ici à mettre dans la destination"}

Mon souci, c'est que je n'arrive pas à trouver, pour l'instant, une représentation JSON qui pourrait intégrer de nouveaux attributs ni la manière de traiter le JSON en JS (avec JQuery).


RE: XML vs JSON - php_addict - 09-02-2011

en php json_encode() te transforme un array en objet JSON , vachement pratique...

en JS avec JQUERY et ajax, la parametre dataType: 'json' doit etre utilisé si tu recupere un objet json


function j_aime_ajax()
{
$(function()
{
$.ajax({url: 'http://www.example.com',
cache: false,
dataType: 'json',
success:function(json){ma_function_callback(json);},
error:function(XMLHttpRequest, textStatus, errorThrows){}
});
});
}

et un objet json est natif en JS me semble t il donc aucun soucis pour l'utiliser...

mais je ne suis pas tout à fait assez familier avec JS+JQUEYR+AJAX pour t'en dire d'avantage, mais mieux faut à mon avis que tu utilise json si tu fait de l'ajax, moins verbeux, natif en JS, etc...


RE: XML vs JSON - Sephi-Chan - 09-02-2011

L'équivalent rigoureux serait :


{
response: {
content: {
text: "Lorem ipsum dolor sit amet"
destination: 42,
}
}
}

Mais à mon sens, inclure le nœud racine n'est pas pertinent, tu peux simplifier vachement. Par exemple :


{
text: "Lorem ipsum dolor sit amet",
mode: "append",
destination: 42,
anything: [ "foo", "bar" ]
}

Aller au plus simple n'est pas un crime ! Tu ajoutes les attributs que tu veux : tu es libre de la structure. Smile

Quant à l'utilisation avec jQuery, là aussi c'est très simple. Tu indiques à jQuery que tu vas récupérer du JSON (soit via le dataType de la méthode ajax(), soit grâce aux méthodes raccourcies comme getJSON()) et lui va se charger de parser la réponse (en appelant la méthode JSON.parse(responseText)). Tu auras alors un objet directement utilisable !


$.getJSON(url, function(response){
alert(response.anything.join(", "));
});


Sephi-Chan


RE: XML vs JSON - php_addict - 10-02-2011

(09-02-2011, 11:59 PM)Sephi-Chan a écrit : Quant à l'utilisation avec jQuery, là aussi c'est très simple. Tu indiques à jQuery que tu vas récupérer du JSON (soit via le dataType de la méthode ajax(), soit grâce aux méthodes raccourcies comme getJSON()) et lui va se charger de parser la réponse (en appelant la méthode JSON.parse(responseText)). Tu auras alors un objet directement utilisable !

merci pour lui avoir donné des explications plus clair que les miennes Wink

perso j'utilises dataType: 'json' , je ne connaissais pas getJSON()...et je me pose la question : pourquoi faire compliquer (utiliser getJSON() ) alors que l'on peut faire simple (utiliser dataType: 'json') ?


RE: XML vs JSON - Sephi-Chan - 10-02-2011

Et bien, quand tu n'as besoin que d'un callback en cas de succès, autant utiliser les méthodes simplifiées, c'est plus léger à l'œil.

Je te retourne la question. Pourquoi écrirais-je :


$.ajax({
url: url,
dataType: 'json',
success: function(response){
alert(response.anything.join(", "));
}
});

Alors que je peux écrire :


$.getJSON(url, function(response){
alert(response.anything.join(", "));
});


Sephi-Chan


RE: XML vs JSON - Argorate - 10-02-2011

C'est marrant, tu n'as pas mentionné ce système tout a l'heure ^^
Du coup cela fait exactement la même chose donc?
getJSON() c'est aussi de l'AJAX en somme...


RE: XML vs JSON - Sephi-Chan - 10-02-2011

Bien sûr. Comme expliqué dans la documentation de getJSON() :

Citation :$.getJSON(url, [ data ], [ success(data, textStatus, jqXHR) ] )

This is a shorthand Ajax function, which is equivalent to:

$.ajax({
url: url,
dataType: 'json',
data: data,
success: callback
});


Sephi-Chan


RE: XML vs JSON - Holy - 10-02-2011

J'utilisais de l'XML en sortie AJAX jusqu'à y a quelques semaines, j'ai décidé de passer entièrement au JSon (ça faisait un p'tit temps que je comptais changer).

J'ai une fonction d'interprétation de l'objet qui me permet de manipuler le dom directement. Comme ton "mode", mais en plus complexe, avec pas mal d'autres possibilités comme "addClass", "fadeIn", "val", etc.

En gros, chaque attribut ayant un correspondant JQuery est exécuté avec quelques trucs en plus évidemment. C'est vraiment pratique du coup parce qu'on gère 99% de la sortie au niveau du serveur.
Les seules exceptions (le petit pourcentage restant) sont les manipulations plus compliquées ^^.

Voici un exemple typique :
<?php
$aAjax[] = array('sel' => '#place', 'val' => 'Modifier');
$aAjax[] = array('sel' => '#delplace', 'removeClass' => 'hidden');
$aAjax[] = array(
'sel' => '#l-59-30',
'src' => './ress/img/decor/2.gif',
'class' => 'place32',
'after' => '<img src="./ress/img/vide.gif" />'
);
?>

J’aplatis tout ça en sortie avec json_encode() et je le récupère en javascript avec une fonction générique qui analyse l'objet de sortie.


RE: XML vs JSON - Myrina - 10-02-2011

Merci pour les réponses et surtout celle d'Holy car le fonctionnement que je recherche semble extrêmement proche du sien.

Il ne me reste plus qu'à itérer sur les données envoyées pour les traiter et switcher le retour selon le format fourni (XML ou JSON); pour l'instant, je vais garder la possibilité de travailler en XML en plus du JSON.