jquery $ .post - JSON - bonne façon d'envoyer / recevoir des données d'entrée (du côté client seulement) - A Deux questions Quête

StackOverflow https://stackoverflow.com/questions/3546661

  •  30-09-2019
  •  | 
  •  

Question

Imaginons que nous avons quelque chose comme:

$.post('somescript.php', 'WHAT CAN WE PUT HERE?',
        function(replyData) {

1) Par défaut, le troisième argument de la méthode .POST $, va lire la réponse XMLResponse correcte? Alors, pourquoi avons-nous besoin cet argument « replyData »? Quelles sont les raisons que nous pouvons avoir pour avoir cet argument?

2) second argument accepte les données qui seront envoyées. D'accord. Je voudrais utiliser JSON, cependant, je ne sais pas si je devrais utiliser un format JSON sur ce second argument ou cibler le champ de formulaire d'entrée qui contiendra ces données?

Notes complémentaires: Les données proviennent d'un champ d'entrée, et je dois l'envoyer par une demande ajax .POST $ au serveur. Je compte utiliser JSON encode et JSON fonctions php decode.

Merci à l'avance, MEM

Était-ce utile?

La solution

L'argument replyData contient le corps de la réponse renvoyée par le serveur, que vous pouvez ensuite manipuler pour afficher sur votre page, vérifiez que le côté serveur a traité les données avec succès, etc. Vous ne devez pas utiliser ( par exemple, si vous ne retournez pas les données).

Les données que vous fournissent (au format JSON), devra encore être sous la forme d'une chaîne de requête, par exemple param=value. La valeur sera également besoin correctement coder, en utilisant encodeURIComponent () :

$.post('somescript.php', 'data='+encodeURIComponent(myJSON),
    function(replyData) {

Ensuite, vous pouvez accéder au JSON dans le script PHP dans le $ _ POST superglobale:

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

JSON serait un peu exagéré pour un champ d'entrée simple, cependant. Il est rare d'utiliser JSON en place de paires nom / valeur pour les champs de formulaire.

Autres conseils

1) Le troisième paramètre est la fonction de rappel. Si vous fournissez une fonction anonyme, comme dans votre exemple, vous devez nommer l'argument pour y accéder. Si vous retournez une structure JSON, vous pouvez accéder replyData.foo etc.

2) Vous pouvez tirer les valeurs de votre forme et de construire une structure JSON.

var data = {};
data.threadid = $(form).find('input[name=threadid]').val();
data.commentid = $(form).find('input[name=commentid]').val();

$.post('somescript.php', data, function(replyData) { alert(replyData.foo); } );

Je volé cette fonction de Drupal et fixe la virgule de fin sur les tableaux et les objets Wich causés Zend_Json_Server à lancer des exceptions.

    var toJson = function(v) {
  // typeof null == object so we check beforehand;
  if ( v == null ){
    return null;  
  }

  switch (typeof v) {
    case 'boolean':
      return v == true ? 'TRUE' : 'FALSE';
    case 'number':
      return v;
    case 'string':
      return '"'+ v +'"';
    case 'object':
      if ( !(v instanceof Array) ){
          var output = "{";
          for(i in v) {
            output = output + '"'+i+'"' + ":" + toJson(v[i]) + ",";
          }
          output = output.substr(0,output.length-1) + "}"; // Fix the trailing comma error wich isn't officialy allowed.
      }else{
          var output = "[";
          for(i in v) {
            output = output + toJson(v[i]) + ",";
          }
          output = output.substr(0,output.length-1) + "]"; // Fix the trailing comma error wich isn't officialy allowed.
      }
      return output;
    default:
      return null;
  }
}

Maintenant nourrir juste vos données comme ceci:

var myJsonString = toJson($('myform').serialize());

Wich retournera une chaîne JSON générée récursive à partir de votre variable. Les travaux pour la plupart de mes applications.

Je suis d'accord avec le général Andy E que si vous regardez le string de données qui seront affichées ils devraient ressemble

'data='+encodeURIComponent(myJSON)

Je veux seulement clair que dans la pratique une utilisation le deuxième paramètre de $ .post la plupart du temps non comme une chaîne:

$.post('somescript.php', 'data='+encodeURIComponent(myJSON), ... );

mais comme un objet:

$.post('somescript.php', {data: myJSON}, ...);

Ensuite, la fonction encodeURIComponent d'appel jQuery et construire la chaîne 'data='+encodeURIComponent(myJSON) par rapport de jQuery.param () en interne. Beaucoup plus important de comprendre que d'avoir myJSON vous devez produire cette chaîne JSON par rapport de certains JSON codant pour des fonctions d'un objet qui contient les données que vous souhaitez publier. Ainsi, le code ressemble dans la pratique comme suit

$.post('somescript.php', { data: JSON.stringify(myObject) }, ...);

JSON.stringify est une fonction JavaScript à partir json2.js que vous pouvez télécharger gratuitement de http: // www .json.org / js.html .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top