2010-06-15 121 views
14

使用jQuery $.post函數,如果您發送null值,它會以"null"到達服務器端。例如:通過AJAX發佈空值

的Javascript:

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

PHP:

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

我明白爲什麼會這樣,但不知道來解決限制的最佳方式?你應該:

  1. 循環瀏覽JS中的所有變量,然後發送它們並替換爲空字符串?
  2. 解釋"null" as null在服務器端?
  3. 不要發送變量嗎?
  4. 還有別的嗎?

回答

13

我會把它編碼成JSON。

如:

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

可以在服務器上使用json_decode,和類型將被保留:

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

對於那些沒有可以使用原生JSON對象這些瀏覽器[http://www.json.org/json2.js] – meouw 2010-06-15 06:54:24

0

嘗試的JavaScript對象轉換爲JSON有:

$.post('test.php', JSON.stringify({ foo : null })); 
0
  1. 這不會是一個好的性能想法的想法,特別是如果涉及大量變量的話。
  2. 可能。這可以通過查找所有期望的值來完成,並忽略其他任何內容。直接翻譯"null" -> null如果接受用戶輸入可能會很危險。
  3. 這會導致未設置變量。那麼就可以在該變量上使用!isset()。這將是我的選擇。

如果你不想有JSON之間的轉換,我會使用選項3,根本無法發送空的任何變量,然後使用if (!isset($_POST['my-var']))

-1

這是一個奇怪的修復來獲得Dates發佈正確C# MVC

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

我只是有這個問題,我已經解決了更簡單,也許你這會太。 在你的PHP文件,你可以做到這一點

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