Javascript 未捕获类型错误:无法读取属性';然后';调用函数时未定义的
我明白了,我的剧本怎么了 未捕获的TypeError:无法读取未定义的属性“then” 这是我的剧本:Javascript 未捕获类型错误:无法读取属性';然后';调用函数时未定义的,javascript,jquery,Javascript,Jquery,我明白了,我的剧本怎么了 未捕获的TypeError:无法读取未定义的属性“then” 这是我的剧本: <script type="text/javascript" src="jquery-2.1.3.min.js"></script> <script type="text/javascript"> function connected() { $.ajaxSetup({ cache: false }); $.ajax({ ty
<script type="text/javascript" src="jquery-2.1.3.min.js"></script>
<script type="text/javascript">
function connected() {
$.ajaxSetup({ cache: false });
$.ajax({
type:"get",
url:"cgi-bin/check",
success:function(data) {
if (data.indexOf("192.168.1.1:1080")>-1) {
var audio = new Audio("on.ogg");
audio.play();
document.getElementById("output").innerHTML = "Connected";
clearTimeout(loop);
}
}
});
loop = setTimeout(connected, 1000);
}
function disconnected() {
$.ajaxSetup({ cache: false });
$.ajax({
type:"get",
url:"cgi-bin/check",
success:function(data) {
document.getElementById("output").innerHTML = "function disconnected ";
if (data.indexOf("ssh disconnected")>-1) {
var audio = new Audio("off.ogg");
audio.play();
document.getElementById("output").innerHTML = "Disconnected: "+data;
clearTimeout(loop);
}
}
});
loop = setTimeout(disconnected, 1000);
}
function notif() {
var loop;
$.ajaxSetup({ cache: false });
$.ajax({
type:"get",
url:"cgi-bin/check",
success:function(data) {
if (data.indexOf("192.168.1.1:1080")>-1) {
document.getElementById("output").innerHTML = "It's connected, waiting to disconnect";
disconnected().then(connected);
}
else {
document.getElementById("output").innerHTML = "It's disconnected, waiting to connect";
connected().then(disconnected);
}
}
});
}
notif();
</script>
<p id="output"></p>
函数连接(){
$.ajaxSetup({cache:false});
$.ajax({
键入:“获取”,
url:“cgi bin/检查”,
成功:功能(数据){
如果(数据索引(“192.168.1.1:1080”)>-1){
var audio=新音频(“on.ogg”);
音频播放();
document.getElementById(“输出”).innerHTML=“已连接”;
清除超时(循环);
}
}
});
循环=设置超时(已连接,1000);
}
函数断开连接(){
$.ajaxSetup({cache:false});
$.ajax({
键入:“获取”,
url:“cgi bin/检查”,
成功:功能(数据){
document.getElementById(“输出”).innerHTML=“函数已断开”;
if(data.indexOf(“ssh断开”)>-1){
var audio=新音频(“off.ogg”);
音频播放();
document.getElementById(“输出”).innerHTML=“断开连接:”+数据;
清除超时(循环);
}
}
});
循环=设置超时(断开连接,1000);
}
函数notif(){
var回路;
$.ajaxSetup({cache:false});
$.ajax({
键入:“获取”,
url:“cgi bin/检查”,
成功:功能(数据){
如果(数据索引(“192.168.1.1:1080”)>-1){
document.getElementById(“输出”).innerHTML=“它已连接,正在等待断开连接”;
断开(),然后(连接);
}
否则{
document.getElementById(“输出”).innerHTML=“它已断开连接,正在等待连接”;
连接(),然后(断开);
}
}
});
}
notif();
这是通知我ssh隧道是否断开/连接的脚本。它将在每次出现时播放一个声音。除非我遗漏了什么,否则您的
断开连接的和连接的函数不会返回任何内容,您正在尝试执行。然后()
.then()
是一种方法
从代码的外观来看,您似乎不完全理解异步事物是如何工作的,因此我建议您阅读一些有关这方面的参考资料
参考:
弃用通知:jqXHR.success()、jqXHR.error()和
jqXHR.complete()回调从jQuery 1.8开始就不推荐使用。准备
要最终删除它们,请使用jqXHR.done()、jqXHR.fail(),
而jqXHR.always()则相反
将代码更改为如下所示:
$.ajax({
type:"get",
url:"cgi-bin/check"}).done(function(data) {} );
您可以使用done或then然后将捕获错误和成功响应。我按照您的建议做了,但我得到了一个错误Uncaught SyntaxError:Unexpected token)测试。php:16
这是我修改的脚本,我为语法错误道歉-它已被更正。我回答的要点是,你不应该使用“成功”,你需要使用“完成”或“然后”。