2010-05-08 24 views
15

Tôi đang chuyển đổi một ứng dụng javascript/php/ajax để sử dụng jQuery để đảm bảo khả năng tương thích với các trình duyệt khác với Firefox.Không thể chuyển null vào máy chủ bằng cách sử dụng jQuery AJAX. Giá trị nhận được tại máy chủ là chuỗi "null"

Tôi gặp sự cố khi chuyển giá trị true, false và null bằng chức năng ajax của jQuery. đang

javascript: Mã

$.ajax 
(
    { 
     url  : <server_url>, 
     dataType: 'json', 
     type : 'POST', 
     success : receiveAjaxMessage, 
     data: 
     { 
     valueTrue : true, 
     valueFalse: false, 
     valueNull : null 
     } 
    } 
); 

PHP:

var_dump($_POST); 

server đầu ra:

array(3) { 
    ["valueTrue"]=> 
    string(4) "true" 
    ["valueFalse"]=> 
    string(5) "false" 
    ["valueNull"]=> 
    string(4) "null" 
} 

Vấn đề là rằng null, sự thật, và giá trị sai đang được chuyển đổi sang dây.

Mã AJAX Javascript hiện đang được sử dụng chuyển giá trị rỗng, đúng và sai chính xác nhưng chỉ hoạt động trong Firefox.

Có ai biết cách giải quyết vấn đề này bằng jQuery không?


Dưới đây là một số mã làm việc (không sử dụng jQuery) để so sánh với mã không hoạt động được nêu ở trên.

Mã Javascript:

ajaxPort.send 
(
    <server_url>, 
    { 
     valueTrue : true, 
     valueFalse: false, 
     valueNull : null 
    } 
); 

mã PHP:

var_dump(json_decode(file_get_contents('php://input'), true)); 

server đầu ra:

array(3) { 
    ["valueTrue"]=> 
    bool(true) 
    ["valueFalse"]=> 
    bool(false) 
    ["valueNull"]=> 
    NULL 
} 

Lưu ý rằng null, sự thật, và giá trị sai nhận được một cách chính xác.

Cũng lưu ý rằng trong phương pháp thứ hai mảng $ _POST không được sử dụng trong mã PHP. Tôi nghĩ rằng đây là chìa khóa cho vấn đề, nhưng tôi không thể tìm thấy một cách để nhân rộng hành vi này bằng cách sử dụng jQuery.


Phần này được thêm sau khi câu trả lời dưới đây được chấp nhận.

Đây là phiên bản đã sửa của mã gốc.

mã Javascript: Mã

$.ajax 
(
    { 
     url  : <server_url>, 
     dataType: 'json', 
     type : 'POST', 
     success : receiveAjaxMessage, 
     data : JSON.stringify 
     (
     { 
      valueTrue : true, 
      valueFalse: false, 
      valueNull : null 
     } 
    ) 
    } 
); 

PHP:

var_dump(json_decode(file_get_contents('php://input'), true)); 

server đầu ra:

array(3) { 
    ["valueTrue"]=> 
    bool(true) 
    ["valueFalse"]=> 
    bool(false) 
    ["valueNull"]=> 
    NULL 
} 
+0

Tôi có thể sai nhưng dữ liệu của bạn có hợp lệ JSON không? Không phải tất cả các khóa/giá trị được đính kèm trong ""? Nó có thể không giải quyết vấn đề của bạn nhưng nếu bạn xâu chuỗi dữ liệu của bạn và chỉ cần vượt qua một chuỗi rỗng cho giá trị null sau đó tôi nghĩ rằng nó có thể làm việc? Tôi có một cảm giác jquery là gói dữ liệu của bạn trong "" để giá trị bạn đang gửi đến máy chủ là actuall một chuỗi có chứa các văn bản null, như thế này: "null". – DannyLane

+0

Cảm ơn bạn đã trả lời Danny, nhưng tôi chắc chắn rằng true, false và null có thể được sử dụng unquoted trong JSON. Xem www.json.org. – Tom

+0

Có thể bạn đã đúng, nhưng tôi đã hiểu lầm bạn. Việc xâu chuỗi dữ liệu ở phía Javascript đã giải quyết được vấn đề. – Tom

Trả lời

10

bạn mong chờ gì? Bạn đang gửi các giá trị này dưới dạng tham số POST, là các chuỗi văn bản đơn giản. Nếu bạn muốn chuyển an toàn kiểu, hãy sử dụng một số loại mã hóa, chẳng hạn như JSON. (Mà không phải là những gì dataType không - đó đề cập đến phản ứng từ máy chủ.)

+1

Cảm ơn bạn. Mã hóa dữ liệu dưới dạng JSON đã khắc phục được sự cố. Tôi hiểu sai mục đích của tùy chọn 'dataType'. – Tom

1

Tôi hy vọng nó sẽ gửi thông số truy vấn dưới dạng valueNull = chứ không phải valueNull = null, đó là trải nghiệm của tôi.

Nếu bạn đang thực hiện REST với JSON, bạn vẫn cần phải gửi thông số truy vấn cho GETS và bạn không được chuyển đổi tất cả các GETS thành POSTS để giải quyết vấn đề này.

9

Bạn có thể sử dụng không xác định thay vì rỗng.

data: { 
    valueTrue : true, 
    valueFalse: false, 
    valueNull : undefined 
} 
+0

Giải pháp ngọt ngào! – zeckdude

+0

Điều đó thực sự hiệu quả với tôi. –

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