2010-06-15 3 views
14

En utilisant la fonction jQuery $.post, si vous envoyez une valeur null, elle arrive du côté serveur sous la forme "null". Exemple:Affichage de valeurs nulles via AJAX

Javascript:

$.post('test.php', { foo : null }); 

PHP:

var_dump($_POST['foo']); // string(4) "null" 

Je comprends pourquoi il en est ainsi, mais se demandait la meilleure façon de contourner la limitation? Devriez-vous:

  1. Parcourir toutes les variables dans JS avant de les envoyer et les remplacer par une chaîne vide?
  2. Interprétez "null" comme null côté serveur?
  3. Ne pas envoyer la variable du tout?
  4. Quelque chose d'autre?

Répondre

13

Je l'encoderais en JSON.

Par exemple:

$.ajax({ 
    url: 'test.php', 
    type: 'POST', 
    data: JSON.stringify({foo : null}), 
    contentType: "application/json", 
    success: function(data) { 
    // ... 
    } 
}); 

Vous pouvez utiliser json_decode sur le serveur, et les types seront conservés:

$msg = json_decode(file_get_contents("php://input")); 
var_export($msg->foo); // NULL 
+0

Pour les navigateurs qui ne disposent pas d'un objet JSON natif, vous pouvez utiliser [http://www.json.org/json2.js] – meouw

0

Essayez de convertir l'objet javascript pour JSON avec:

$.post('test.php', JSON.stringify({ foo : null })); 
0
  1. Ce ne serait pas une bonne performance l'idée commune, surtout si de grands ensembles de variables sont impliqués.
  2. Eventuellement. Cela pourrait être fait en recherchant toutes les valeurs attendues, et en ignorant toute autre chose aussi. la traduction directe "null" -> null peut être dangereuse si vous saisissez une entrée utilisateur.
  3. Cela entraînerait une variable n'étant pas définie. il serait possible d'utiliser! isset() sur cette variable alors. Ce serait mon choix.

Si vous ne voulez pas avoir de conversion JSON, je voudrais utiliser l'option 3 et tout simplement pas envoyer toutes les variables qui sont null, utilisez if (!isset($_POST['my-var']))

-1

C'est une étrange solution pour obtenir Dates pour poster correctement C# MVC:

$.post(url, JSON.parse(JSON.stringify({ ListOfObjWithDates: listOfObjWithDates })), ... 
0

Je viens d'avoir ce problème que j'ai résolu plus simplement, peut-être pour vous ce serez aussi. Dans votre fichier php vous pouvez le faire

if ($_POST[var] == 'null'){ $_POST[var] = NULL; }