Сведения о вопросе

Gentleman

09:58, 28th August, 2020

Теги

JavaScript   jQuery    

Отправка булевых значений в запросах jQuery.ajax()

Просмотров: 311   Ответов: 5

$.ajax({
url : uri,
type : 'post',
data : {someBooleanVar1: false, subVar: {someBooleanVar2: true}}
});


Проблема в том, что сервер получит переменные someBooleanVar1 и someBooleanVar2 в виде строк «false» и «true», а не «0» и «1».

Вопрос в том, есть ли в jQuery какой-то параметр или метод автоматизирующий конвертацию булевых значений в 0/1? Ну или если средствами jQuery такое не реализовать, то можеть кто-нибудь знает простенький способ обойти рекурсивно объект заменив boolean на number.

Спасибо!



  Сведения об ответе

LAST

04:04, 6th August, 2020

Можно использовать так: { somevar1: boolVar?1:0 }


  Сведения об ответе

SKY

12:22, 21st August, 2020

Прошу прощения, пропустил вопрос про метод замены. Попробуйте так:

function bools2numbers(arr)
{
  for(var i in arr)
  {
    var o = arr[i];
    if(typeof o == 'object')
      bools2numbers(arr[i]);
    else if(typeof o == 'boolean')
      arr[i] = o?1:0;
  }
  return arr;
}


Функция изменяет передаваемый массив. Если это не подходит — легко заменить на копирование.


  Сведения об ответе

PROGA

20:29, 25th August, 2020

Есть следующий вариант с учётом некоторых очевидных ограничений (и наличия jQ 1.4+).

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

    $.ajaxSetup({
        processData: false,
        beforeSend: function(xhr, settings) {
            settings.data = $.param(bool2Int(settings.data))
        }
    });


  Сведения об ответе

SEEYOU

13:31, 7th August, 2020

А почему false и true не катит? На стороне сервера что стоит? Ну в крайнем случае, наверное, можно регексами заменить, как при отправке, так и при получение.


  Сведения об ответе

nYU

13:41, 7th August, 2020

Вариант с экономией кода :)
{ myvar: bool + 0 }


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться