2014-06-19 2 views
1

숫자 검색을위한 스크립트에 ajax 호출이 있습니다. 반응은 이름과 성 (문자열)이있는 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 

기본적으로 나는 입력이 있으며, 사용자가 10 개의 숫자에 도달하면이 스크립트는 서버를 호출하고 해당 번호로 이름을 가져옵니다.

아이디어가 있으십니까? 그냥 오타 야?

+0

서버 측 workes :.. 에코 ($ _ GET [ '콜백'] "("로 json_encode ($ 결과를). ");"); – simonkaspers1

+0

'toggle' 변수를'keyup()'밖에서 선언하려고 시도해야합니다 – user887675

+0

해당 텍스트 상자에서 초점이 맞춰진 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

우선, 여러 가지 식별자가있는 익명의 함수를 작성하면 안됩니다. 그냥 엉망진창에서 더 명확하게 볼 수 있도록 함수의 이름을 지정하십시오!

변수 번호와 Google은 키 입력을 호출하는 익명의 함수에 대해 로컬입니다. 여기에 문제가없는 것 같습니까? 이처럼

:

$(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() 메서드의 반환에, 문자열의 길이를 측정하는 .length를 사용하고 있는지 생각 번호". 귀하의 입력이 전화 번호로, 나는 .val() 메서드가 정수를 반환하는 것 같아요, 제대로 작동하려면 .length에 대한 문자열로 변환해야 할거야.

number.toString().length; 
+0

테스트로 전화 번호 대신 영숫자 문자를 입력하면 .val()이 문자열을 반환하고 현재 스크립트가 올바르게 작동하고 ajax 요청 만 실행한다고 생각합니다. 10 번째 입력에서 –

관련 문제