Ajax回调多次调用

时间:2014-06-19 13:43:54

标签: javascript jquery ajax

我有一个用于搜索数字的脚本的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个数字时,这个脚本将调用服务器并获得该数字的名称。

有什么想法吗?只是一个错字?

3 个答案:

答案 0 :(得分:1)

试试这个:

$(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

答案 1 :(得分:0)

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

尝试

number.toString().length;

答案 2 :(得分:-1)

首先,您不应该使用多个标识编写匿名函数。 只需命名你的功能,就可以看清楚那个烂摊子!

您的变量number和toogle是您调用keyup的匿名函数的本地函数。 我想这里可能有问题吗?

像这样:

$(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
    }
};