2010-02-16 29 views
2

如果我的javascript ajaxes遠到我的服務器,並在[49]純文本格式返回49的ID是有辦法的,我一個做這樣的事情......(我已經測試和不工作)帶有通配符的Javascript切換語句?

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

凡通配符是*,我想確保它包含在兩個方括號內?

因爲我需要檢查是否沒有其他字樣返回,如error,我保留default意外的錯誤,有什麼想法? :) 謝謝!

+0

@ Tracker1的答案應該真的是正確的一個考慮問題的標題。 –

回答

0

您可以嘗試使用if elseregex來匹配通配符模式。

假設data = "[49]";或括號內的任何數字。

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

我只是將數據保存到一個變種,然後將數據設置爲其他東西,如果它是正確的;)乾杯 – tarnfeld

0

簡短回答:不,交換機/外殼不能處理通配符。

在進入交換機之前,您可能應該進行一些預處理/完整性檢查,或者完全丟棄它,因爲它更適合特定情況的場景,而不是處理精簡的數據。正則表達式將在這裏更好地爲您服務。

+1

是的,它可以,看到我以前的帖子......實際上它可以處理真正的開關,然後評估每個案例。它不一定是像其他語言中的case語句那樣的固定值。 – Tracker1

+0

woot!不錯的一個,不知道這一點。 –

9

您可以明確切換爲true,這將對每個case語句使用評估。然而,如果你有不到4-5的情況,最好使用if/else if/else if/else塊。

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

我通常做一些錯誤的維修我的迴應方式誘捕/ REST調用,使我幾乎總是返回正確的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!