Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 多次调用Ajax回调_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 多次调用Ajax回调

Javascript 多次调用Ajax回调,javascript,jquery,ajax,Javascript,Jquery,Ajax,我对搜索数字的脚本进行了ajax调用。响应是一个带有名称和姓氏(字符串)的json数组。客户端脚本就是这样,我想我真的不明白为什么脚本会循环并多次发送响应。toogle解决方案是我最后一次尝试 $(document).ready(function () { $("#phone").keyup(function () { var number = $(this).val(); var toogle = 0; if (number.lengt

我对搜索数字的脚本进行了ajax调用。响应是一个带有名称和姓氏(字符串)的json数组。客户端脚本就是这样,我想我真的不明白为什么脚本会循环并多次发送响应。toogle解决方案是我最后一次尝试

$(document).ready(function () {
    $("#phone").keyup(function () {
        var number = $(this).val();
        var toogle = 0;

        if (number.length == 10 && toogle == 0) {
            alert('inside with 10 numbers');
            toogle = 1;
            $.ajax({
                type: "POST",
                url: "info-phone.php",
                dataType: "jsonp",
                data: {
                    number: number
                }
            }).done(function (msg) {
                toogle = 0;
                if (msg.Name != "" && msg.Surname != "") {
                    $("#phone").add("Are you " + msg.Name + " " + msg.Surname);
                };
            }); //done-function
        }
    }); //phone-keyup
}); //document-ready
基本上,我有一个输入,当用户达到10个号码时,这个脚本将调用服务器并获得该号码的名称


有什么想法吗?只是输入错误?

首先,您不应该编写带有多个标识的匿名函数。 只需命名你的函数,就能在混乱中看得更清楚

变量number和toogle是您调用的匿名函数的局部变量。 我想这里可能有问题不

像这样:

$(document).ready(function () {
    window.toogle = 0;
    $("#phone").click(phoneKeyUp); //phone-keyup -> this one you declare it to make document.ready() clearer
}); //document-ready


var phoneKeyUp = function() {

    var number = $(this).val();

    if (number.length == 10 && window.toogle == 0) {
        alert('inside with 10 numbers');
        window.toogle = 1;
        $.ajax({
            type: "POST",
            url: "info-phone.php",
            dataType: "jsonp",
            data: {
                number: number
            }
        }).done(function (msg) {
            window.toogle = 0;
            if (msg.Name != "" && msg.Surname != "") {
                $("#phone").add("Are you " + msg.Name + " " + msg.Surname);
            }
        }); //done-function -> this one may stay here
    }
};

我认为您的问题在于,在返回jQuery.val()方法时,您使用了.length来度量字符串的长度,该方法返回字符串或“数字”。由于您的输入是一个电话号码,我认为.val()方法返回的是一个整数,您需要将其转换为.length的字符串才能正常工作

试一试

试试这个:

$(document).ready(function () {
    window.toogle = 0;
    $("#phone").click(function () {
        var number = $(this).val();

        if (number.length == 10 && window.toogle == 0) {
            alert('inside with 10 numbers');
            window.toogle = 1;
            $.ajax({
                type: "POST",
                url: "info-phone.php",
                dataType: "jsonp",
                data: {
                    number: number
                }
            }).done(function (msg) {
                window.toogle = 0;
                if (msg.Name != "" && msg.Surname != "") {
                    $("#phone").add("Are you " + msg.Name + " " + msg.Surname);
                }
            }); //done-function
        }
    }); //phone-keyup
}); //document-ready

服务器端可以很好地处理这个echo:echo($\u GET['callback'].“(“.json\u encode($result)”);”;您至少应该尝试在
keyup()
文本框外声明
toggle
变量。请在该文本框外调用ajax,它会起作用。“在该框外聚焦”是指模糊?我认为当前的方法更好,因为它会在输入达到10个字符时建议姓氏,而不是在用户尝试移动到下一个字段时建议姓氏。解决方案是可行的,我得到响应并写出它,但它被多次调用有点奇怪?作为测试,我认为如果您输入字母数字字符而不是电话号码,.val()将返回一个字符串,您当前的脚本将正常工作,只在第10次输入时触发ajax请求。
$(document).ready(function () {
    window.toogle = 0;
    $("#phone").click(function () {
        var number = $(this).val();

        if (number.length == 10 && window.toogle == 0) {
            alert('inside with 10 numbers');
            window.toogle = 1;
            $.ajax({
                type: "POST",
                url: "info-phone.php",
                dataType: "jsonp",
                data: {
                    number: number
                }
            }).done(function (msg) {
                window.toogle = 0;
                if (msg.Name != "" && msg.Surname != "") {
                    $("#phone").add("Are you " + msg.Name + " " + msg.Surname);
                }
            }); //done-function
        }
    }); //phone-keyup
}); //document-ready