2010-05-04 14 views
10

Ciao io sto cercando di gestire una risposta JSON ajaxjavascript interruttore (vero)

Ecco il mio codice

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

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

in base a ciò che j è ottenere un rendimento che faccio la mia azione ma io continuo a ricevere il default.

devo avvertire i valori j e venire correct.Some come caso (j.choice1) caso (j.choice2) non funziona.

ho provato caso (j.choice1! = "") (J.choice2! = "") Ma in questo scenario continuo a ricevere la prima scelta.

Che cosa mi manca

+2

Perché stai usando un 'dichiarazione switch' per un compito che è più adatto a un'istruzione 'if'? –

+0

Stai avvisando "choice2" in entrambi i primi due casi. È quello che intendevi? – Syntactic

+0

bene si ottiene un voto per una domanda strana ma interessante. quindi quali sono i valori possibili per 'j.choice1' e' j.choice2'? – lincolnk

risposta

17

Funziona per me:

var a = 0, b = true; 

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

Tuttavia, le etichette case devono essere uguali a true, non necessariamente implicite.
Inoltre, solo il primo caso che restituisce true eseguirà.

5

è necessario leggere sulla dichiarazione switch. Non dovresti attivare un valore costante.

Sembra che è necessario utilizzare, se le dichiarazioni, in quanto non si vuole veramente essere il passaggio sul valore j:

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

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

    alert("default"); 
    } 
} 
+1

Solo curioso: perché non si dovrebbe attivare un valore costante? –

+0

Fornirà sempre lo stesso risultato. È in qualche modo simile alla condizione 'if (x = y)' – Pops

+0

@Lord Torgamus: tecnicamente, sarebbe simile solo se' y' fosse sempre vero o sempre falso. –

0

In un caso come questo, un modo migliore per fare questo è probabilmente qualcosa di simile:

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

risolto

Sulla base SLaks rispondo modifico il codice, come di seguito

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

Per tutti chiedendo perché cambiare e non se.

L'interruttore eseguirà solo 1 istruzione, ma se è possibile eseguire più di 1 se viene visualizzato un errore (ad esempio, se si imposta scelta1 e scelta 2, se viene visualizzato un avviso, ma l'opzione avverte solo la scelta1).

La risposta attesa come la scelta ha a che fare con la carica di carta di credito di banca in modo che io voglio garantire che solo 1 azione exetute

Grazie a tutti

+3

Un if/else se la catena eseguirà anche al massimo un ramo. –

+0

Hai quello invertito. Un 'if statement' eseguirà solo il singolo blocco, usando' switch (true) 'o' switch (false) 'vi permetterà di passare a un'istruzione adiacente più bassa se non tralasciamo la' break'. Attenti al caso in cui cadiate non sarà valutato. –