我尝试在用户使用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();
});

答案 0 :(得分:1)
beforeSend
是同步函数,ajax不是。您正试图基于异步函数暂停执行函数。你不能这样做,因为checkNetConnection
的执行不会阻塞beforeSend
直到它得到结果,它将开始执行检查网络连接的Ajax调用,然后继续为jQuery执行Ajax网络连接之前的库ajax会触发回调。
此外,您为什么还要检查网络连接?用户确实到了你的页面?如果他失去了连接,你仍然会收到错误,所以你可以通过ajax error
回调来处理错误。