Задать вопрос
liaren
@liaren
Фрилансер, опенсорсер, тех лид

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

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




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



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



Спасибо!
  • Вопрос задан
  • 3688 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 5
iStyx
@iStyx
Можно использовать так: { somevar1: boolVar?1:0 }
Ответ написан
iStyx
@iStyx
Прошу прощения, пропустил вопрос про метод замены. Попробуйте так:

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;
}


Функция изменяет передаваемый массив. Если это не подходит — легко заменить на копирование.
Ответ написан
theOnlyBoy
@theOnlyBoy
Есть следующий вариант с учётом некоторых очевидных ограничений (и наличия 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))
        }
    });
Ответ написан
@Neir0
А почему false и true не катит? На стороне сервера что стоит? Ну в крайнем случае, наверное, можно регексами заменить, как при отправке, так и при получение.
Ответ написан
Вариант с экономией кода :)
{ myvar: bool + 0 }
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы