2010-05-04 16 views
10

हाय मैं एक ajax json प्रतिक्रियाजावास्क्रिप्ट स्विच (सही)

यहाँ मेरी कोड

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

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

के आधार पर क्या जे लौट मैं अपने कार्रवाई, लेकिन मैं डिफ़ॉल्ट मिलती रहती है संभाल करने के लिए कोशिश कर रहा हूँ।

मैंने जे मानों को अलर्ट किया है और सही आ गया है। कुछ कैसे मामला (j.choice1) केस (j.choice2) काम नहीं कर रहा है।

मैंने मामले की कोशिश की (j.choice1! = "") (J.choice2! = "") लेकिन इस परिदृश्य में मुझे पहली पसंद मिल रही है।

क्या मैं

+2

को

धन्यवाद exetute जाएगा चाहते हैं क्रेडिट कार्ड के साथ क्या करना है के रूप में क्यों आप एक के लिए एक 'switch' बयान का उपयोग कर रहे कार्य जो 'if' कथन के लिए सबसे उपयुक्त है? –

+0

आप पहले दो मामलों में "पसंद 2" को सतर्क कर रहे हैं। क्या आप इसका इरादा रखते हैं? – 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 के बराबर होना चाहिए, जो कि बिल्कुल स्पष्ट नहीं है।
इसके अलावा, केवल पहला मामला जो 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

@ लॉर्ड टोरगामस: तकनीकी रूप से, यह केवल तभी होगा जब' 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 कार्रवाई सभी

+3

यदि कोई अन्य शाखा में श्रृंखला निष्पादित की जाएगी तो एक और/अन्य। –

+0

आपके पास उलटा हुआ है। एक 'अगर कथन' केवल 'स्विच (सत्य)' या 'स्विच (झूठी)' का उपयोग करके एकल ब्लॉक निष्पादित करेगा, तो आप 'ब्रेक' छोड़ने पर आपको निम्न आसन्न कथन तक पहुंचने की अनुमति देंगे। बाद के मामले से सावधान रहें जिनके लिए आप गिरते हैं उनका मूल्यांकन नहीं किया जाएगा। –

संबंधित मुद्दे