$.get 不是一个函数,不推荐使用主线程上的同步 XMLHttpRequest

$.get is not a function, Synchronous XMLHttpRequest on the main thread is deprecated

提问人:garyshackle 提问时间:4/12/2021 最后编辑:garyshackle 更新时间:4/13/2021 访问量:46

问:

我正在为我正在构建的网页编写 JavaScript。我成功地使用了以下(简化)代码:

$('#selector').on('click', function () {

  if (isTrue) {
    if (isTrue) {
    }
    else {
      // execute block of code 'A', which is similar to 'B'
      callAjax(url, function() {

        // do some things...
      })
    }
  }
  else {
    // execute block of code 'B', which is similar to 'A'
    callAjax(url, function() {

      // do some things...
    })
  } 
});

/**************************
* Call Ajax
**************************/
function callAjax(url, callback) {

  $.get(
    url, 
    function(data) {
  
      callback();
    }
  )
}

但是,我想通过模块化来改进代码,如下所示:

$('#selector').on('click', function () {
  if (isTrue) {
    if (isTrue) {
    }
    else {
      handler(objects);
    }
  }
  else {
    handler(objects);
  }
});    

/**************************
* Handler
**************************/
function handler(objects) {

  callAjax(url, function() {

    // do some things...
  })
}

/**************************
* Call Ajax
**************************/
function callAjax(url, callback) {

  $.get(
    url, 
    function(data) {
  
      callback();
    }
  )
}

每当我运行第二组代码时,它都会抛出“主线程上的同步 XMLHttpRequest 已弃用”警告。后续运行代码会抛出“$.get is not a function”错误,并且代码会在调用 handler() 后立即停止运行。

我不是在引用 JavaScript 的精简版本。

为什么会抛出这些错误和警告,我怎样才能以我所描述的方式成功地简化我的代码?

编辑:

为了更加清晰并回答我到目前为止的评论,以下是我在网页底部标签中包含的脚本:<body></body>

<script src="https://code.jquery.com/jquery-3.2.1.min.js" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>

我想我也应该包括这个。它引用了我正在编写的 .js 文件。

<script src="script.js"></script>
JavaScript jQuery AJAX 回调

评论

0赞 Markus Zeller 4/12/2021
你在使用jQuery吗?是否包括在内?
1赞 Twisty 4/12/2021
看看 stackoverflow.com/questions/24639335/ 可能会有所帮助......
0赞 charlietfl 4/12/2021
确定您没有加载两次jQuery.js,而第二个是精简版本?
0赞 garyshackle 4/12/2021
谢谢你的评论。我已经编辑了我的帖子,所以你可以看到我在网页中包含了哪些脚本。感谢您@Twisty引用该帖子。我已经看了好几次了,但没有什么能让我印象深刻。我可能会再看一遍,尝试一些我以前没有做过的事情。
0赞 Quentin 4/13/2021
危险:您使用的是非常旧版本的 jQuery。升级到最新版本。获取安全修补程序。

答:

0赞 garyshackle 4/12/2021 #1

在检查了我的代码并参考了以下链接中的帖子后:

JavaScript 控制台 .log 导致错误:“主线程上的同步 XMLHttpRequest 已弃用...”

我意识到我的代码中有一个错误。我向ajax请求传递了一个“未定义”的url,而不是我所期望的字符串路径。