2010-02-16 7 views
2

Si mon javascript Aias loin à mon serveur et retourne un ID de 49 dans le format texte brut de [49] est-il une façon dont je un ce faire quelque chose comme ... (je l'ai testé et ne fonctionne pas)Déclaration de changement Javascript avec joker?

switch(data) 
{ 
    case '[*]': 
     (..etc.) 
    break; 
} 

Lorsque le caractère générique est le * et que je veux m'assurer qu'il est entouré de deux parenthèses carrées?

Parce que j'ai besoin de vérifier qu'il n'y avait pas un autre mot retourné comme error et je réserve le default pour des erreurs inattendues, des idées? :) Merci!

+0

@ réponse de Tracker1 devrait vraiment être le bon compte tenu du titre de la question. –

Répondre

0

Vous pouvez essayer d'utiliser if else et regex pour les motifs génériques correspondants.

En supposant data = "[49]"; ou tout autre chiffre entre parenthèses.

if(/\[\d+\]/.test(data)){ 
    //do something 
}else{ 
    //default 
} 
+0

je viens d'enregistrer les données dans un var et ensuite définir les données à autre chose si elle était correcte;) acclamations – tarnfeld

0

Réponse courte: Non, le commutateur/boîtier ne peut pas gérer les caractères génériques.

Avant d'entrer dans le commutateur, vous devez probablement effectuer une vérification avant traitement ou simplement le supprimer complètement, car il est plus approprié pour des scénarios spécifiques plutôt que de traiter des données simplifiées. Regexp vous servira mieux ici.

+1

Oui, il peut, voir mon post précédent ... en fait, il peut gérer vrai pour le commutateur, puis évaluer chaque cas . il ne doit pas être des valeurs fixes comme des déclarations de cas dans d'autres langues. – Tracker1

+0

woot! gentil, ne savait pas à ce sujet. –

9

Vous pouvez effectuer un basculement sur true explicitement, qui utilisera l'évaluation sur chaque instruction de requête.

switch (true) { 
    case ((/^\[\d+\]$/).test(data)): 
     //matches data; 
     break; 
    case (data == "something else"): 
     //... 
     break; 
    default: 
     //... 
}

Cependant, si vous avez moins de dire 4-5 cas, il serait préférable d'utiliser if/else if/else if/else blocs.

if ((/^\[\d+\]$/).test(data)) { 
     //matches data; 
} else if (data == "something else") { 
     //... 
} else { 
     //... 
}

que je fais habituellement une erreur de piégeage dans mes méthodes de réponse pour les appels de service/repos pour que je retourne presque toujours un bon JSON avec une propriété d'erreur s'il y a une erreur.

try { 
    if (response.responseText.indexOf("<html") >= 0) { 
    throw response.responseText; 
    } 

    var data = JSON.parse(response.responseText); 
    if (data.error) 
    throw data.error; 

    //handle response data object. 
    if ((/^\[\d+\]$/).test(data)) { 
    //matches data; 
    } else if (data == "something else") { 
    //... 
    } else { 
    //... 
    } 
} catch(err) { 
    if (err && err.message) { 
     //use err.message 
    } else if (err && err.toString().indexOf("<html") >= 0) { 
     //handle error text 
    } 
} 
1

Vous pouvez créer une liste de modèles et de rappels associés, effectuer une simple boucle et rechercher des correspondances. Par exemple:

var patterns = []; 

    function myCallback(){ document.write('myCallback!'); } 
    function myOtherCallback(){ document.write('myOtherCallback!'); } 
    function myLastCallback(){ document.write('You will never see me!'); } 

    patterns.push({'pattern':new RegExp(/\[.+\]/),'callback': myCallback}); 
    patterns.push({'pattern':new RegExp(/.+/),'callback':myOtherCallback}); 
    patterns.push({'pattern':new RegExp(/A-Z{3}/),'callback':myLastCallback}); 

    var f = "[49]"; 
    for(var i=0;i<patterns.length;i++){ 
     if(patterns[i].pattern.test(f)){ 
      patterns[i].callback(); 
     } 
    } 

qui produit les éléments suivants:

myCallback!myOtherCallback! 
Questions connexes