我如何从选择框中获取值并使用它从API获得响应?

时间:2018-08-24 13:02:42

标签: javascript html ajax

我想制作一个随机数事实应用程序,该程序由输入数字触发。该应用程序运行良好,但是我希望能够选择年份事实或数学事实,但是即使我选择年份/数学,它也只能显示数字事实。我使用的API允许我使用该格式(例如http://numbersapi.com/2001/year)。另外,我在JSlint中没有错误。

let fact = document.querySelector("#fact");
let factText = document.querySelector("#factText");
let numberInput = document.querySelector("#numberInput");
let selecter = document.querySelector("#numberSelect");

numberInput.addEventListener("input", getFactAjax);

function getFactAjax() {
  let xhr = new XMLHttpRequest();
  let number = numberInput.value;
  let numberType = "";
    switch(selecter.value){
      case 1:
        numberType = "";
        break;
      case 2:
        numberType = "/year";
        break;
      case 3:
        numberType = "/math";
    }
    xhr.open("GET", "http://numbersapi.com/"+ number + numberType);
    xhr.onload = function() {
        if(this.status == 200 && number != ""){
           fact.style.display = "block";
           factText.innerHTML = this.responseText;
           }
    };
    xhr.send();
};

1 个答案:

答案 0 :(得分:3)

input.value返回一个字符串。使用严格相等运算符===完成的比较将返回false进行字符串/整数比较。 switch语句使用严格的相等性。因此,当在案例中使用数字时,直接给switch语句从input.value返回的字符串时,没有任何案例将与给定的字符串匹配,并且整个事情基本上不起作用。一种简单的解决方案是在这种情况下使用字符串,例如case "1":,而不是case 1:。 “适当”的解决方案是先将字符串转换为数字,例如通过使用parseInt

Input reference

Equality reference