2010-06-15 19 views
14

Funkcja wysyłania wartości null za pomocą funkcji jQuery $.post przechodzi na stronę serwera pod nazwą "null". Przykład:Wysyłanie wartości pustych za pośrednictwem AJAX

Javascript:

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

PHP:

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

rozumiem dlaczego tak jest, ale zastanawiałem się, że najlepszym sposobem, aby obejść ograniczenia? Powinieneś:

  1. Zapętlić wszystkie zmienne w JS przed wysłaniem i zastąpić pusty ciąg?
  2. Interpretować "null" jako null po stronie serwera?
  3. Nie wysyłaj zmiennej w ogóle?
  4. Coś jeszcze?

Odpowiedz

13

Chciałbym zakodować go w JSON.

Np

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

Można użyć json_decode na serwerze i zostaną zachowane typy:

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

dla tych przeglądarek, które nie mają natywną obiekt JSON można użyć [http://www.json.org/json2.js] – meouw

0

Spróbuj przekonwertować obiekt javascript do JSON z:

$.post('test.php', JSON.stringify({ foo : null })); 
0
  1. To nie byłby dobry przykład Pomysł, zwłaszcza jeśli w grę wchodzą duże zbiory zmiennych.
  2. Prawdopodobnie. Można tego dokonać, szukając wszystkich oczekiwanych wartości i ignorując cokolwiek innego. Bezpośrednie tłumaczenie "null" -> null może być niebezpieczne w przypadku wprowadzania danych przez użytkownika.
  3. Powoduje to, że zmienna nie jest ustawiona. byłoby wtedy możliwe użycie! isset() na tej zmiennej. To byłby mój wybór.

Jeśli nie chcesz mieć konwersji pomiędzy JSON, chciałbym skorzystać z opcji 3 i po prostu nie wysyła żadnych zmiennych, które są nieważne, a następnie użyć if (!isset($_POST['my-var']))

-1

To dziwne fix dostać Dates odpowiedzieć prawidłowo C# MVC:

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

prostu miałem ten problem, że mam rozwiązane prościej, może dla ciebie to „ll być zbyt. W pliku php można to zrobić

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

Powiązane problemy