if / else语句改为切换

时间:2015-11-20 08:37:16

标签: javascript jquery ajax if-statement switch-statement

我有这个ajax请求:

    SJA.ajax(dataToSend, //this is internal method, which sends requests to the urls  
function (respond) {

      var categorySelect = that.$modal.find('.cat-post')[0].selectize; //using selectize.js plugin for selects. 

          if (respond) {
          callback && callback(respond);
          for (var i in respond) {
            //console.log(respond[i].id);
            //console.log(respond[i].name);
            categorySelect.addOption({value: respond[i].id, text: respond[i].name}); //adding new options to a select field.
          }
        }
    });
  var category: that.$modal.find('.cat-post').val() //this is option value in select field !== 'null' ? $('.cat-post').val() : null, //this variable is responsible for keeping selected data. 

然后我比较选定的数据(因为我需要获取一些字符串值才能在表中使用它):

var categoryName = 'all';
        switch (category) {
          case '0' // compare with respond id: 
            categoryName = "all" // compare with respond name ;
            break;
          case '1':
            categoryName = "Health";
            break;
          case '2':
            categoryName = "Cars";
            break;
        }

之后我在桌子上添加新的td。

  $tbody.append(['<tr data-id="' + row.id + '">',
'<td class="restricted-view-hide view-mode2-hidden view-mode21-hidden">'  + categoryName + '</td>', '</tr>'].join(''));

但我不希望每次在switch中键入新值,我想用某些东西来动态接收新值。 我尝试过这样的事情:

categoryName = respond[i].id != null ? respond[i].name : "any";
这是不行的。有任何想法吗?

2 个答案:

答案 0 :(得分:1)

右。假设:

1)您知道您发布的条件语句使用了response.id和respond.name,其中您的switch语句使用$(“。cat-post”)。val(),并且这两种方法很可能返回完全不同的值。

2)你发布的条件语句使用了你想要它使用的变量,它只是没有给出预期的答案 - 也就是说,在response.id无效的情况下,它没有给你“任何”

如果是这种情况,那么解决方案就足够简单了。没有id的元素为.id返回“”,而不是null,所以请检查是否response.id!=“”,而不是!= null。

categoryName = respond[i].id != "" ? respond[i].name : "any";

那说......

categoryName = respond[i].id != null ? respond[i].name : "any";

这看起来不对劲。它基本上说“如果我的响应元素有一个id,那么使用它的名称值作为categoryName”。这是你想要的吗?如果回复[i] .id,你能确定response [i] .name永远有效吗?为什么不检查是否响应[i] .name是!=“”?如果未设置id属性,是否对name属性的有效性存在疑问?使用

categoryName = respond[i].name != "" ? respond[i].name : "any";

会出现在面值上以使其更有意义。

值得注意的是,假设1)是一个相当大的假设。如果您的代码当前正以您希望的方式工作,但您希望使其更灵活,除非存在严重的重复数据(其中$(。cat-post)[0] .val()设置为一些值由response [i] .name(或反之亦然)确定,实现上面的内容会破坏你的代码。

请注意,这仅适用于您的代码从根本上起作用,但却给您错误的值。如果它被打破了,根本没有给你任何回应,那么你需要更具体地说明你的意思“它不起作用”。

答案 1 :(得分:0)

Dunno,如果它可以改变,但尝试:

categoryName = (respond[i].id != null) ? respond[i].name : "any";

而不是^^