Inserimento di valori nulli tramite AJAX

Utilizzando la function jQuery $.post , se si invia un valore null , arriva al lato server come "null" . Esempio:

Javascript:

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

PHP:

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

Capisco perché sia ​​così, ma stavo chiedendo il modo migliore per aggirare la limitazione? Se:

  1. Attivare tutte le variables in JS prima di inviarle e sostituire con una string vuota?
  2. Interpretare "null" come null sul lato server?
  3. Non submit la variabile affatto?
  4. Qualcos'altro?

Vorrei codificarlo in JSON.

Per esempio:

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

È ansible utilizzare json_decode nel server e i tipi saranno conservati:

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

Prova a convertire l'object javascript in JSON con:

 $.post('test.php', JSON.stringify({ foo : null })); 
  1. Questa non sarebbe una buona idea di performance, soprattutto se sono coinvolti in grandi serie di variables.
  2. Possibilmente. Questo può essere fatto cercando tutti i valori attesi e ignorando altrimenti anche. tradurre direttamente "null" -> null potrebbe essere pericoloso se si assume l'input dell'utente.
  3. Ciò comporterebbe che una variabile non fosse impostata. sarebbe ansible utilizzare! isset () su quella variabile allora. Questa sarebbe la mia scelta.

Se non volevi avere la conversione tra JSON, vorrei utilizzare l'opzione 3 e semplicemente non submit variables nulle, quindi utilizzare if (!isset($_POST['my-var']))

Questa è una soluzione strana per get le Dates da submit correttamente in C# MVC :

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