2015-01-07 118 views
1

我想在javascript ajax調用中有一些if語句,我覺得應該可以,也許我的語法是錯誤的。我試圖創建下面的時間表部分:javascript中的多個三元運算符的語法調用

$.ajax({ 
       type : 'POST', 
       name : 'Submitting Request', 
       url  : '/breadcrumbs/crumb', 
       dataType: 'json', 
       data : { 
        parameters : paramsObj, 
        schedule: {  paramsObj.isfirst ? firstSched 
            : paramsObj.issecond ? secondSched 
            : paramsObj.isthird ? thirdSched 
           } 
          }, 
      success : function(){}, 
      error : function(jqXHR, status, error) {} 
     }); 

我不斷收到「Uncaught SyntaxError:意外的標記。」解決此塊,特別是在計劃行:

   data : { 
       parameters : paramsObj, 
       schedule: {  paramsObj.isfirst ? firstSched 
           : paramsObj.issecond ? secondSched 
           : paramsObj.isthird ? thirdSched 
          } 
         }, 

在特定的時間表,這就是我想要與三元運營商做:

if(paramsObj.isfirst === true) { schedule = firstSched} 
if(paramsObj.issecond === true){ schedule = secondSched} 
if(paramsObj.isthird === true) { schedule = thirdSched} 

有誰知道我是什麼做錯了?

+1

的'{}'周圍的表達不需要 – Pointy

+4

爲了您的未來的自己和你的同事的份上,不要做!閱讀非常困難。 – joews

+2

嵌套三元運算符是邪惡的。將代碼移出一個單獨的塊,甚至是一個函數,並使用if/else或switch。 – Quentin

回答

6

就在相關領域

schedule: paramsObj.isfirst ? firstSched : 
    paramsObj.issecond ? secondSched : 
    paramsObj.isthird ? thirdSched : undefined 

全部通話

$.ajax({ 
    type: 'POST', 
    name: 'Submitting Request', 
    url: '/breadcrumbs/crumb', 
    dataType: 'json', 
    data: { 
     parameters: paramsObj, 
     schedule: paramsObj.isfirst ? firstSched : 
      paramsObj.issecond ? secondSched : 
      paramsObj.isthird ? thirdSched : undefined, 
     success: function(){}, 
     error: function(jqXHR, status, error) {} 
    }); 

注意

正如其他人所指出的那樣,鏈接ternaries可能很難閱讀,這可能導致錯誤和維護公關oblems。我個人並不介意將它們鏈接在一起,只要它們按照行顯示,以便它們易於遵循...

+0

謝謝!我選擇這個作爲解決方案,因爲我的問題是關於三元版本的,但是由於對三元組的反應很大,我最終用我的代碼的修改版本的dave的答案。 – user2847749

2

嵌套的三元組可能很難閱讀。我建議重寫以此爲Immediately-executed function expression (IIFE),使其更可讀:

schedule: (function() { 
    if (paramsObj.isfirst) 
     return firstSched; 
    else if (paramsObj.issecond) 
     return secondSched; 
    else if (paramsObj.isthird) 
     return thirdSched; 
    else 
     return undefined; 
})(); 
+1

只是一個註釋 - 你的代碼與他所說的他試圖做的不完全一樣......例如,如果所有三個都是假的,他的代碼不應該將時間安排設置爲thirdSched,但是你的代碼不會...... –

+0

@sethflowers謝謝我沒有仔細閱讀這篇文章 - 我修復了這個問題,並刪除了我的答案與您的冗餘部分。 – dave

+1

謝謝你的回答!我最終使用這個作爲我的最終解決方案,但確實需要修改它,如塞斯花注意到,你在你的答案更正。你們都非常有幫助! – user2847749