Bool paramètre de jQuery Ajax reçu en tant que chaîne littérale “false”/“vrai” en PHP

Cette question est:

Ne peut pas passer la valeur null au serveur à l'aide de jQuery AJAX. La valeur reçue sur le serveur est la chaîne de caractères "null"

Mais je me demande encore parce que la solution de cette question est très moche, et je pense doit être un meilleur.

PROBLÈME

Lorsque vous envoyez des données avec jQuery Ajax PHP à l'aide de POST vous obtenez des chaînes "false"(chaîne de caractères) à la place de false(bool), "true" à la place de vrai(bool) et "null" à la place de NULL:

SOLUTION
(proposé dans la question ci-dessus):
convertir les données en JSON avant de l'envoyer, avec jQuery, et puis décoder des données en PHP.
Avec le code:

Code Javascript:

$.ajax
(
   {
      url     : <server_url>,
      dataType: 'json',
      type    : 'POST',
      success : receiveAjaxMessage,
      data    : JSON.stringify
      (
         {
            valueTrue : true,
            valueFalse: false,
            valueNull : null
         }
      )
   }
);

Code PHP:

var_dump(json_decode(file_get_contents('php://input'), true));

Pour moi ce n'est pas une solution, seulement un vilain hack.

Le problème dans ma situation, c'est que je ne peux pas utiliser file_get_contents('php://input') pour accéder à l' $_POST, même plus, je ne peux pas utiliser $_POST parce que je suis en utilisant HMVC.

Et je sais que je peux le résoudre de la vérification de ces "faux", "vrai" et "null" en PHP, ou l'envoi de 1 et de 0 instear le vrai et le faux dans jQuery.

Mais je pense que cela doit vraiment être un problème commun, et jQuery est vraiment un cadre commun, donc je suis sûre qu'il y a de mieux et de manière élégante pour envoyer les données avec le bon type de jQuery.

  • Dernière, j'ai vérifié, il n'a pas d'importance si elle est envoyée comme une chaîne de caractères ou fait vrai: codepad.viper-7.com/otQet7
  • jQuery n'est pas de la magie pure, il doit obéir à la spécification html, tout est envoyé comme une chaîne de caractères, tout comme les POST et GET. La conversion de Type est un serveur de question de côté.
  • c'est parce que vous êtes chicking pour de vrai, aucune chaîne n'est pas vide en PHP est coulé pour de vrai, de vérifier ceci à la place: codepad.viper-7.com/aL9P5E
  • Je sais que cela doit être envoyé sous forme de chaîne, mais jQuery peut convertir des faux à "0" au lieu de "faux"
  • Non, elle peut pas parce que jQuery est la bibliothèque, mais la chaîne de conversion est définie par Java Script.
  • pourquoi pas? peut-être qu'il pourrait faire quelque chose comme: si(boolValue === true) boolValue = 1; else if(boolValue === false) boolBalue = 0; ou peut-être quelque chose comme if(typeof boolValue === "boolean") boolValue = boolValue ? 1 : 0;
  • Eh bien, vous avez raison, il pourrait, mais quand je regarde le code, je sais que je suis l'envoi de chaînes et je sais que "valueTrue : de vrais" jeux de valueTrue "vrai" parce que de la façon JS fonctionne et toString permettra de résoudre à 'true'. C'est un "when in Rome" genre de chose, vous avez la perspective JS doit être de servir de PHP quand JS est utilisé par de nombreuses langues et dans de nombreux d'entre eux c'est un non-problème.
  • Ne serait-il pas plus facile d'utilisation 0 & 1?
  • vraiment? dans quelle langue(string),"false") est égal à (bool)faux? Je pense que dans presque toutes les langues (string)"0" est converti en (bool)faux, il n'est donc pas seulement pour PHP, c'est une façon plus robuste pour envoyer bool paramètres pourquoi jQuery (et JS à vraiment) convertit (bool)faux à la chaîne "false" à la place de la chaîne "0"???
  • Suffit d'utiliser -- dataType: 'json' -- dans votre requête AJAX
  • Double Possible de les variables booléennes posté par AJAX être traitées comme des chaînes à côté serveur
  • Une bonne réponse peut être trouvée ici: stackoverflow.com/a/20463398/2311074

InformationsquelleAutor Enrique | 2011-09-13