Javascript 未捕获类型错误:无法读取属性';然后';调用函数时未定义的

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

我明白了,我的剧本怎么了

未捕获的TypeError:无法读取未定义的属性“then”

这是我的剧本:

<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) {} );

您可以使用donethen然后将捕获错误和成功响应。

我按照您的建议做了,但我得到了一个错误
Uncaught SyntaxError:Unexpected token)测试。php:16
这是我修改的脚本,我为语法错误道歉-它已被更正。我回答的要点是,你不应该使用“成功”,你需要使用“完成”或“然后”。