![](/img/trans.png)
[英]Sending an array of objects to PHP function with jQuery.ajax request
[英]jQuery.ajax() and sending boolean request arguments
$.ajax({
url : uri,
type : 'post',
data : {someBooleanVar1: false, subVar: {someBooleanVar2: true}}
});
問題是在服務器上someBooleanVar1和someBooleanVar2將作為字符串“false”和“true”接收,但不能作為“0”和“1”接收。 有沒有辦法自動將布爾參數轉換為“1”和“0”?
有一個固定版本的@jcubic答案:
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);
我知道這篇文章有點舊,但我仍然希望傳遞這些信息^^我將vars傳遞給php並抓住它們:
filter_var($var, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
像這樣我將字符串轉換為布爾值true=1
和false=
false,因為字符串在php中為空
也許我讀錯了這個問題。 但這就是我所理解的:)使用上面的代碼,您可以輕松構建一個函數並添加更多過濾器,以使一切正常工作:)
試試這個,它應該自動將布爾值轉換為數據選項中的數字。
$.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);
這是對易江答案的解決方法。 如果您調用ajax並且沒有數據集,則會出錯。 在轉換布爾值之前添加了一個測試,以查看是否設置了data屬性。 我使用下划線,隨意用原生js函數hasownprop交換它...
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 );
這是一個更優化的版本,它不會污染全局命名空間,遞歸轉換值,處理潛在的未定義數據屬性,並使用適當的方法將布爾值轉換為相應的整數值。
$.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);
我仍然認為,在發送請求之前,這不是由jQuery在內部執行的,這是非常令人震驚的。
不是真的自動但添加0會將布爾值轉換為0或1:
data : {someBooleanVar1: false + 0, someBooleanVar2: true + 0}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.