2014-06-19 136 views
1

我有一个ajax调用脚本来搜索数字。这个respons是一个名字和姓氏的json数组(字符串)。客户端脚本是这样的,我认为真的不明白为什么脚本循环并多次发送响应。 toogle解决方案是我尝试的最后一件事。Ajax回调调用多次

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

Basicly我有一个输入,并且当用户到达10号,该脚本将调用服务器,并获得名字,这个数字。

任何想法?只是一个错字?

+0

服务器端workes只是罚款与此呼应:。 回波($ _ GET [ '回调'] “(” json_encode($结果)。“);”); – simonkaspers1

+0

你应该至少尝试在'keyup()' – user887675

+0

之外声明'toggle'变量。请在焦点上调用ajax,使其不起作用。 –

回答

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

首先,你不应该写几个身份的匿名函数。 只要命名你的功能,看看更清楚的混乱!

您的变量编号和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 
    } 
}; 
+0

我应该在文档中声明它吗?要么? – simonkaspers1

+0

不,外面。文档准备就绪是您链接事件的地方 – user1835565

0

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

尝试

number.toString().length; 
+0

作为测试,我认为如果输入字母数字字符而不是电话号码,.val()将返回一个字符串,并且当前脚本将正常工作,只会触发ajax请求在第10次输入。 –