2014-06-19 139 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次輸入。 –