2010-05-04 2 views
10

Привет я пытаюсь справиться с AJAX ответ JSonJavascript переключатель (верно)

вот мой код

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) не работают.

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

Что я упускаю

+2

Почему вы используете 'switch' утверждение для задача, которая лучше всего подходит для оператора 'if'? –

+0

Вы предупреждаете «choice2» в обоих первых двух случаях. Это то, что вы намеревались? – Syntactic

+0

ну, вы получите голосование за странный, но интересный вопрос. так каковы ваши возможные значения для 'j.choice1' и' j.choice2'? – lincolnk

ответ

17

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

var a = 0, b = true; 

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

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

5

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

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

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

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

    alert("default"); 
    } 
} 
+1

Просто любопытно: почему бы не включить постоянное значение? –

+0

Он будет давать тот же результат каждый раз. Это несколько похоже на условие if (x = y) – Pops

+0

@Lord Torgamus: технически это было бы похоже, если 'y' всегда был правдивым или всегда ложным. –

0

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

success: function (j) { 
    if(j.choice1 || j.choice2) { 
     alert("choice2"); 
    } else { 
     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 действие exetute

благодарственных всем

+3

Цепочка if/else if будет выполнять не более одной ветви. –

+0

У вас есть это перевернутое. Оператор 'if' будет выполнять только один блок, используя' switch (true) 'или' switch (false) ', что позволит вам перейти к нижнему смежному утверждению, если вы оставите' break'. Остерегайтесь последующего случая, в который вы попадаете, не будут оцениваться. –

Смежные вопросы