即使有中断

时间:2017-03-01 02:49:14

标签: javascript jquery switch-statement

我尝试做的是创建一个switch语句,该语句从JSON API获取数据并根据用户的位置打印它。

例如,如果用户位于美国,则仅打印城市和州。如果位于美国境外,则会打印城市和国家/地区。如果城市是空字符串,则它仅打印国家/地区。

截至目前,无论我将VPN设置到哪个位置,都会转到默认情况(城市和国家/地区)。

  var location;
  var city;
  var state;
  var country;

  $.getJSON("http://ipinfo.io", function(data) {
    console.log(data);
    location = data.loc;
    city = data.city;
    state = data.region;
    country = data.country;

    switch (data) {
      case country === 'US':
        $("#yourCity").html(city + ", " + state);
        break;
      case city === "":
        $("#yourCity").html(country);
        break;
      default:
        $("#yourCity").html(city + ", " + country);
    }

我选择使用switch语句而不是if语句,因为我可能希望稍后在线上添加更多案例。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:4)

您需要在switch语句中传递比data更具体的内容。由于data是一个对象,而不是countrycity,因此它会直接进入默认值。

我认为你正在考虑当它通过案例时,它会查看对象并查看它是否具有值国家或城市,但事实并非如此。您需要传递switch(data.location)之类的内容,然后data.location值可以是国家/地区或城市。所以你可能需要稍微改变一下。希望有意义!

答案 1 :(得分:1)

Switch-case语句只能用于将一个值与其他几个值进行比较。根据您的代码示例,您尝试使用switch case比较国家和城市。这是不可能的,绝对你必须使用if-else语句处理这个。

请考虑以下方法。

  var location;
  var city;
  var state;
  var country;

  $.getJSON("http://ipinfo.io", function(data) {
    console.log(data);
    location = data.loc;
    city = data.city;
    state = data.region;
    country = data.country;

    if(country === 'US'){
        $("#yourCity").html(city + ", " + state);
    }else{
        if(city===''){
            $("#yourCity").html(country);
        }else{
            $("#yourCity").html(city + ", " + country);
        }
    }

您还以错误的方式使用了switch case语句。 Switch case语句没有算术比较符号。尝试切换case语句如下。

var day = new Date().getDay();
switch (day) {
    case 4:
    case 5:
        text = "Soon it is Weekend";
        break; 
    case 0:
    case 6:
        text = "It is Weekend";
        break;
    default: 
        text = "Looking forward to the Weekend";
} 

答案 2 :(得分:0)

您没有正确使用开关盒。

基本上,您需要传递特定类型的data。目前,switch变量不是country也不是city,因此它直接转到default

进一步阅读:

JavaScript Switch Statement