2011-02-08 26 views
7
$.ajax({ 
    url : uri, 
    type : 'post', 
    data : {someBooleanVar1: false, subVar: {someBooleanVar2: true}} 
}); 

Vấn đề là trên máy chủ someBooleanVar1 và someBooleanVar2 sẽ được nhận dưới dạng chuỗi "false" và "true", nhưng không phải là "0" và "1". Có cách nào để tự động chuyển đổi các đối số boolean thành "1" và "0" không?jQuery.ajax() và gửi đối số yêu cầu boolean

Trả lời

2

Có một phiên bản cố định của @jcubic Trả lời:

function convertBoolToNum(obj) { 
    $.each(obj, function(i) { 
     if (typeof obj[i] == 'object') { 
      convertBoolToNum(this); 
     } 
     else if (typeof obj[i] == 'boolean') { 
      obj[i] = Number(obj[i]); 
     } 
    }); 
} 

$.ajax = (function($ajax) { 
    return function(options) { 
    convertBoolToNum(options.data); 
    return $ajax(options); 
    }; 
})($.ajax); 
0

Không thực sự tự động nhưng thêm 0 sẽ chuyển đổi boolean để 0 hoặc 1:

data : {someBooleanVar1: false + 0, someBooleanVar2: true + 0} 
+0

Vì vậy, tôi sẽ cần phải làm điều đó mỗi khi vượt qua một số đối số có thể là boolean? Không, cám ơn! – barbushin

+0

@Senior Bạn mong đợi điều gì? Một số loại cài đặt JS toàn cục sẽ khiến các boolean trở thành 1 hoặc 0 ?? –

+1

Có thể có một số tùy chọn/phương thức rất tùy chỉnh trong jQuery cho trường hợp này. Có thể có một mã javascript ngắn có thể thực hiện chuyển đổi này tự động. – barbushin

1

Hãy thử điều này, nó sẽ tự động chuyển đổi các dữ liệu boolean giá trị số trong các tùy chọn dữ liệu.

$.ajax = (function($ajax) { 
    return function(options) { 
    if (options.data != undefined) { 
     for (var i in options.data) { 
      if (options.data.hasOwnProperty(i) && 
       (typeof options.data[i] == "boolean")) { 
      options.data[i] = Number(options.data[i]); 
      } 
     } 
    }   
    return $ajax(options); 
    }; 
})($.ajax); 
+0

Ý tưởng rất hay! Chỉ có một sai lầm mà đối tượng chuyển đổi không đệ quy, vì vậy nó sẽ không hoạt động với {var: {subVar: false}}. Tôi đã sửa nó, xem tôi trả lời dưới đây. – barbushin

0

Đây là một sửa chữa cho câu trả lời Yi Giang Trạch Dân. Nếu bạn gọi ajax và không có dữ liệu, nó sẽ báo lỗi. Đã thêm một thử nghiệm để xem thuộc tính dữ liệu có được đặt trước khi chuyển đổi các boolean hay không. Tôi sử dụng dấu gạch dưới, cảm thấy tự do để trao đổi nó ra với nguồn gốc chức năng hasownprop js ...

function convertBoolToNum(obj) { 
    $.each(obj, function(i) { 
    if (typeof obj[i] == 'object') { 
     convertBoolToNum(this); 
    } 
    else if (typeof obj[i] == 'boolean') { 
     obj[i] = Number(obj[i]); 
    } 
    }); 
} 

$.ajax = (function($ajax) { 
    return function(options) { 
    if (_.has(options, 'data')) { 
     convertBoolToNum(options.data); 
    } 
    return $ajax(options); 
    }; 
})($.ajax); 
1

tôi biết bài này là một chút cũ nhưng tôi vẫn muốn có sự chuyển thông tin này ^^ tôi vượt qua vars để php và bắt chúng với:

filter_var($var, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE); 

như thế này tôi bật dây vào các phép toán luận true=1false= giả như chuỗi rỗng trong php

có lẽ tôi đã đọc sai câu hỏi. nhưng đây là những gì tôi hiểu :) với mã ở trên, bạn có thể dễ dàng xây dựng một chức năng và thêm nhiều bộ lọc hơn để có được mọi thứ hoạt động theo ý bạn :)

0

Đây là một phiên bản được tối ưu hóa thậm chí không gây ô nhiễm không gian tên chung , chuyển đổi giá trị đệ quy, đảm bảo tiềm năng không xác định dữ liệu thuộc tính và sử dụng phương thức thích hợp để chuyển đổi giá trị boolean thành giá trị nguyên tương ứng của chúng.

$.ajax = (function($ajax) { 
    return function(options) { 
     (function (obj) { 
      var _fn = arguments.callee; 
      $.each(obj, function(i) { 
       if (typeof obj[i] == 'object') { 
        _fn(this); 
       } else if (typeof obj[i] == 'boolean') { 
        obj[i] = ~~obj[i]; 
       } 
      }) 
     })(options.data || {}); 
     return $ajax(options); 
    }; 
})($.ajax);  

Tôi vẫn cho rằng điều này thực sự gây sốc khi jQuery không gửi nội dung này trước khi gửi yêu cầu.

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