2010-06-15 44 views
14

Sử dụng chức năng jQuery $.post, nếu bạn gửi giá trị null, giá trị này sẽ đến phía máy chủ là "null". Ví dụ:Đăng giá trị null qua AJAX

Javascript:

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

PHP:

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

Tôi hiểu tại sao điều này là như vậy, nhưng đã tự hỏi cách tốt nhất để khắc phục hạn chế? Nếu bạn:

  1. Lặp qua tất cả các biến trong JS trước khi bạn gửi chúng và thay thế bằng một chuỗi rỗng?
  2. Giải thích "null"null ở phía máy chủ?
  3. Không gửi biến?
  4. Cái gì khác?

Trả lời

13

Tôi sẽ mã hóa nó thành JSON.

Ví dụ:

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

Bạn có thể sử dụng json_decode trên máy chủ, và các loại sẽ được duy trì:

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

Đối với những trình duyệt mà không có một đối tượng JSON mẹ đẻ bạn có thể sử dụng [http://www.json.org/json2.js] – meouw

0

Thử chuyển đổi đối tượng javascript để JSON với:

$.post('test.php', JSON.stringify({ foo : null })); 
0
  1. Đây sẽ không phải là lợi ích tốt ý tưởng mance, đặc biệt là nếu tập hợp các biến lớn có liên quan.
  2. Có thể. Điều này có thể được thực hiện bằng cách tìm kiếm tất cả các giá trị dự kiến, và bỏ qua bất cứ điều gì khác cũng có. dịch trực tiếp "null" -> null có thể nguy hiểm nếu dùng đầu vào của người dùng.
  3. Điều này sẽ dẫn đến một biến không được đặt. isset() trên biến đó rồi. Đây sẽ là lựa chọn của tôi.

Nếu bạn không muốn có chuyển đổi giữa JSON, tôi sẽ sử dụng tùy chọn 3 và đơn giản là không gửi bất kỳ biến là null, sau đó sử dụng if (!isset($_POST['my-var']))

-1

Đây là một sửa chữa lạ để có được Dates để gửi chính xác trong C# MVC:

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

Tôi chỉ gặp vấn đề này mà tôi đã giải quyết đơn giản hơn, có thể cho bạn cũng vậy. Trong file php của bạn, bạn có thể làm điều đó

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

Các vấn đề liên quan