2010-02-16 5 views
2

Если мой Javascript ajaxes прочь к серверу и возвращает идентификатор 49 в простом текстовом формате [49] есть способ, в котором я сделать что-то вроде этого ... (я протестировал и не работает)Оператор переключения Javascript с подстановочным знаком?

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

Где подстановочный знак *, и я хочу убедиться, что он заключен в две квадратные скобки?

Потому что мне нужно проверить, что не было другого слова, возвращаемого как error, и я резервирую default за непредвиденные ошибки, любые идеи? :) Благодаря!

+0

@ ответ Tracker1 должен быть действительно правильным, учитывая название этого вопроса. –

ответ

0

Вы можете попытаться использовать if else и regex для соответствия шаблонам шаблонов.

Предполагая data = "[49]"; или любые цифры в скобках.

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

Я просто сохранил данные в var, а затем установил данные на что-то еще, если это было правильно;) cheers – tarnfeld

0

Короткий ответ: Нет, переключатель/регистр не может обрабатывать подстановочный знак.

Перед входом в коммутатор вам, вероятно, необходимо выполнить предварительную проверку/проверку работоспособности, или просто полностью отказаться от него, поскольку он более подходит для конкретных сценариев, а не для обработки упорядоченных данных. Regexp будет служить вам лучше здесь.

+1

Да, он может видеть мой предыдущий пост ... на самом деле он может обрабатывать true для коммутатора, а затем оценивать каждый случай , он не должен быть фиксированным значением, например case-заявлениями на других языках. – Tracker1

+0

woot! хороший, не знал об этом. –

9

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

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

Однако, если у вас меньше, чем, скажем 4-5 случаев, было бы лучше использовать, если/иначе, если/иначе, если/иначе блоки.

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

Я обычно делаю некоторые ошибки захвата в моих методах реагирования на обслуживание/остальные звонки, так что я почти всегда возвращает правильный JSON с свойством ошибки, если есть ошибка.

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

Вы можете создать список шаблонов и связанных обратных вызовов и выполнить простой цикл и проверить соответствие. Например:

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

которая выводит следующее:

myCallback!myOtherCallback! 
Смежные вопросы