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