Javascript switch (true)

Привет, я пытаюсь обработать ответ ajax json

вот мой код

success: function (j) {     
    switch(true)
    {
        case (j.choice1):

            alert("choice2");
        break;
        case (j.choice2):
                alert("choice2");
        break;
        default:
            alert("default");
        break;
    }
}

на основе того, что j возвращает, я делаю свое действие, НО я продолжаю получать значение по умолчанию.

Я предупреждаю значения j и прихожу правильно. Некоторое, как случай (j.choice1) case (j.choice2) не работает.

Я попробовал case (j.choice1!= ") (j.choice2!=" ") Но в этом сценарии я всегда получаю первый выбор.

Что мне не хватает

Ответ 1

Это работает для меня:

var a = 0, b = true;

switch(true) {
    case a:
        alert('a');
        break;
    case b:
        alert('b');
        break;
}

Однако метки case должны быть равны true, а не jut неявно true.
Кроме того, будет выполняться только первый случай, который оценивается как true.

Ответ 2

Вам нужно прочитать инструкцию switch. Вы не должны включать постоянное значение.

Кажется, что вам нужно использовать операторы if, так как вы действительно не хотите включать значение j:

success: function (j) {     
    if (j.choice1)
    {
        alert("choice1");
        break;
    }

    if (j.choice2)
    {
        alert("choice2");
        break;
    }

    alert("default");
  }
}

Ответ 3

решаемые

На основании ответа SLaks я изменяю код ниже

    if(j.choice1){ var choice1=true;} else { var choice1=false;}
    if(j.choice2){ var choice2=true;} else { var choice2=false;}

    switch(true)
    {
        case choice1:
            alert("choice1");
        break;
        case choice2:
            alert("choice2");
        break;
        default:
            alert("default");
        break;
    }

Для всех спрашивайте, зачем переключаться, а не если.

Коммутатор выполнит только 1 оператор, но если может выполнить более 1, если какая-либо ошибка возникла в результате ответа (например, если задано значение выбора1 и выбор 2, то если будет предупреждать обоим, но переключатель будет предупреждать только о выборе1).

Ответ, ожидающий, что выбор будет связан с оплатой кредитной карты банку, поэтому я хочу убедиться, что только 1 действие будет выполнено

Спасибо всем

Ответ 4

В таком случае лучший способ сделать это, вероятно, примерно так:

success: function (j) {
    if(j.choice1 || j.choice2) {
        alert("choice2");
    } else {
        alert("default");
    }
}