如何异步处理另一个ajax的beforeSend事件中的ajax回调?

时间:2017-09-01 13:07:29

标签: jquery ajax callback

我尝试在用户使用ajax事件和回调{{1>}功能之前检查互联网连接(我不想使用同步beforeSend )。我相信我在这里遗漏了一些东西,不管回调如何,ping都会不断返回未定义的值。

我的回调函数是

ajax

所以我创建了一个代码段来显示两个function checkNetConnection(u, s, e) { var c=0 $.ajax({ success: s(), error: e, url: u, type: 'Get', }); } 调用,其中一个只是一个测试,第二个是实现回调。我在这里做错了什么,所以回调在ajax事件中没有返回?



beforeSend

function testcall() {
  $.ajax({
    beforeSend: function(jqXHR) {},
    url: "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js",
    type: "Get",
    success: function(res) {
      console.log('jquery.min.js call ok!')
    },
    error: function(jqXHR, textStatus, errorThrown) {
      console.log("jquery.min.js call Failed");
    }
  });
};

function checkNetConnection(u, s, e) {
  $.ajax({
    success: s,
    error: e,
    url: u,
    type: 'Get',
  });
}

function callthis() {
  $.ajax({
    beforeSend: function(jqXHR) {
      if (checkNetConnection("https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js",
          function() {
            return true;
          },
          function() {
            return false;
          }
        )) {
        console.log("jquery.min.js call ok");
      } else {
        console.log("jquery.min.js call Failed");
        jqXHR.abort();
      };

    },
    url: "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js",
    type: "Get",

    success: function(res) {
      console.log('jquery.min.js call ok!')
    },
    error: function(jqXHR, textStatus, errorThrown) {
      console.log("jquery.min.js call Failed");
    }
  });
};
$("#bt1").click(function() {
  testcall();
});

$("#bt2").click(function() {
  callthis();
});




1 个答案:

答案 0 :(得分:1)

beforeSend是同步函数,ajax不是。您正试图基于异步函数暂停执行函数。你不能这样做,因为checkNetConnection的执行不会阻塞beforeSend直到它得到结果,它将开始执行检查网络连接的Ajax调用,然后继续为jQuery执行Ajax网络连接之前的库ajax​​会触发回调。

此外,您为什么还要检查网络连接?用户确实到了你的页面?如果他失去了连接,你仍然会收到错误,所以你可以通过ajax error回调来处理错误。