2015-01-07 2 views
1

Я пытаюсь иметь некоторые операторы if в javascript-вызове ajax, и я чувствую, что это должно быть возможно, просто мой синтаксис неправильный. Я пытаюсь создать график часть ниже:синтаксис нескольких тернарных операторов в ajax-вызове в 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) {} 
     }); 

Я постоянно получаю «неперехваченным 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) {} 
    }); 

Примечание

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

+0

Спасибо! Я выбрал это как решение, потому что мой вопрос касался тройной версии, но из-за такого большого ответа против тройников я закончил работу с измененной версией ответа дэйва на мой код. – 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

Просто заметьте - ваш код не совсем то же самое, что он говорит, что он пытается это сделать ... например, если все три являются ложными, его код не должен устанавливать расписание на третье, но ваш делает ... –

+0

@sethflowers спасибо, что я не читал это достаточно внимательно - я исправил его и удалил часть моего ответа, которая была избыточной с вашей. – dave

+1

Спасибо за этот ответ! В конце концов я использовал это как свое окончательное решение, но мне пришлось его модифицировать, как отмечали цветы Сет, и вы исправили в своем ответе. Вы оба были очень полезны! – user2847749

Смежные вопросы