当它不应该发射的事件

时间:2017-02-11 22:10:11

标签: javascript jquery ajax

我找到了一些能够让我获取URL查询字符串的代码

var QueryURL = function () {
      var query_url = {};
      var query = window.location.search.substring(1);
      var vars = query.split("&");
      for (var i=0;i<vars.length;i++) {
        var pair = vars[i].split("=");
        if (typeof query_url[pair[0]] === "undefined") {
          query_url[pair[0]] = decodeURIComponent(pair[1]);
        } else if (typeof query_url[pair[0]] === "string") {
          var arr = [ query_url[pair[0]],decodeURIComponent(pair[1]) ];
          query_url[pair[0]] = arr;
        } else {
          query_url[pair[0]].push(decodeURIComponent(pair[1]));
        }
      }
      return query_url;
}();

以上代码完美无缺。然而,有些东西我并没有得到。我正在做以下

$( ".search" ).click(function(e) {

    console.log(QueryURL.someID); //outputs undefined

    if(QueryURL.someID !==  "undefined") {
        $.ajax({
            url: "someurl",
            type: "POST",
            success: function (data) {
              console.log(data)
            },
            error: function(xhr, ajaxOptions, thrownError){
            }
        });
    }
});

因此,如果我没有为URL提供查询someID,那么它不应该执行Ajax调用。现在控制台日志输出未定义,正如我所料。但是,出于某种原因,它仍然会触发Ajax请求,即使我有条件可以阻止这种情况发生。

如果QueryURL.someID未定义,为什么还会发出ajax请求?

由于

1 个答案:

答案 0 :(得分:1)

"undefined"是一个字符串,您需要与变量undefined进行比较

if(QueryURL.someID !== undefined) { //ajax call }

来自MDN:

  

全局undefined属性表示未定义的原始值。它是JavaScript的原始类型之一。