2013-02-05 36 views
7

Tôi đang gửi một số dữ liệu trong một cuộc gọi Ajax. Một trong các giá trị là một boolean được đặt thành FALSE. Nó luôn được đánh giá là TRUE trong kịch bản lệnh PHP được Ajax gọi. Ý tưởng nào?Gửi giá trị boolean trong dữ liệu jQuery ajax

$.ajax({ 
    type: "POST", 
    data: {photo_id: photo_id, 
      vote: 1, 
      undo_vote: false}, // This is the important boolean! 
    url: "../../build/ajaxes/vote.php", 
    success: function(data){ 
     console.log(data); 
    } 
}); 

Trong vote.php, kịch bản đó được gọi là ở trên Ajax, tôi kiểm tra giá trị boolean:

if ($_POST['undo_vote'] == true) { 
    Photo::undo_vote($_POST['photo_id']); 
} else { 
    Photo::vote($_POST['photo_id'], $_POST['vote']); 
} 

Nhưng điều kiện $_POST['undo_vote'] == true được LUÔN đáp ứng.

+5

Các bạn đã thử 'nếu ($ _POST ['undo_vote'] == 'true') {'? (Tôi mong đợi các tham số yêu cầu được nhận dưới dạng chuỗi trừ khi bạn chuyển một chuỗi JSON và phân tích cú pháp phía máy chủ trước khi kiểm tra các thuộc tính riêng lẻ.) – nnnnnn

+0

Có, các biến được đăng dưới dạng chuỗi. Thử nghiệm cho chuỗi "false" luôn đúng. – showdev

+1

n là đúng. Tất cả các tham số GET/POST là các chuỗi và '" false "' là một giá trị trung thực. –

Trả lời

12

Bài đăng chỉ là văn bản và văn bản sẽ đánh giá là đúng trong php. Một sửa chữa nhanh chóng sẽ là gửi một số không thay vì sai. Bạn cũng có thể đặt dấu ngoặc kép xung quanh sự thật của bạn trong PHP.

if ($_POST['undo_vote'] == "true") { 
    Photo::undo_vote($_POST['photo_id']); 
} else { 
    Photo::vote($_POST['photo_id'], $_POST['vote']); 
} 

Sau đó, bạn có thể chuyển thành văn bản đúng/sai. Nếu đó là những gì bạn thích.

+0

Thực hành không tốt để gửi các boolean là 0 hay 1? Tôi có nên làm một số mã hóa JSON, hoặc cái gì khác để làm cho loại mạnh hơn? –

+0

Câu trả lời của bạn là chính xác và hoạt động bằng cách này, chỉ cần 8 phút để chấp nhận :) –

+0

@DonnyP Nó thực sự là một vấn đề của hương vị. Hầu hết các lập trình viên biết làm thế nào 1 và 0 làm việc cho đúng/sai, nhưng tùy thuộc vào nơi mà điều này đang được sử dụng nó có thể rõ ràng hơn để sử dụng JSON. –

0

Bạn có thể sử dụng JSON.stringify() để gửi yêu cầu dữ liệu:

data : JSON.stringify(json)

và giải mã nó trên máy chủ:

$data = json_decode($_POST);

0

Bạn có thể sử dụng 0 và 1 cho undo_vote và gõ đúc nó trong php:

JS bên:

undo_vote: 0 // false 

Server side:

$undovote = (bool) $_POST['undo_vote']; // now you have Boolean true/false 

if($undovote) { 
    // True, do something 
} else { 
    // False, do something else 
} 
Các vấn đề liên quan