2015-01-07 70 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