簡體   English   中英

jQuery.ajax()並發送布爾請求參數

[英]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=1false= 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM