2013-04-11 57 views
1

我的html表單上的輸入有問題。確實,我正在將這個輸入的twitter名稱放入一個Ajax函數中,該函數通過twitter從api中調用了推文。 由於我有一個setInterval函數來檢查更新,輸入一次又一次地傳遞給函數來獲取推文。爲什麼我的函數會繼續從我的輸入文本字段中讀取輸入內容?

問題是該函數似乎直接從文本輸入框中的內容讀取輸入。因此,如果用戶在沒有按下輸入按鈕或按下按鈕的情況下更改文本,該功能會不斷讀取該文本作爲輸入。因此,在輸入或按下按鈕提交後,最初輸入的輸入不是固定的。

這裏是HTML表單以輸入:

<div id="topdiv">Input Twitter ID: <input type="text" id="userid" onkeydown="if(event.keyCode===13) {document.getElementById('tweet-button').click();}"> 
<input type="submit" id="tweet-button" onclick="getStatusesX();" value="Get recent tweets"> 
<p id="tweetbox"></p> 
</div> 

這裏的功能是:

function getStatusesX() { 

    var userID = document.getElementById("userid").value; 
    getStatuses(userID); 
    var intervalstop = setInterval(function() {getStatuses(userID);}, 20000); 
    clearInterval(intervalstop);} 

//Create a cross-browser XMLHttp Request object 
function getXMLHttp() { 

    var xmlhttp; 
    if (window.ActiveXObject) { 
     XMLHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } else if (window.XMLHttpRequest) { 
     XMLHttp = new XMLHttpRequest(); 
    } else { 
     alert("Your browser does not support XMLHTTP!"); 
    } 
    return XMLHttp; 
} 

//function that searches for the tweets via php 
function getStatuses(userID){ 

XMLHttp1 = getXMLHttp(); 

    //ajax call to a php file that will extract the tweets 
    XMLHttp1.open('GET', 'TwitterGlimpsePHP.php?userid='userID, true); 

    // Process the data when the ajax object changes its state 
    XMLHttp1.onreadystatechange = function() { 
     if(XMLHttp1.readyState == 4) { 
      if(XMLHttp1.status ==200) { //no problem has been detected 
       document.getElementById("tweetbox").innerHTML=XMLHttp1.responseText; 
      } 
     } 
    } 
    XMLHttp1.send(null); 
} 

我想作爲文本按下ENTER後應採取的輸入。我曾嘗試將其分配給變量,但無法解決爲什麼它始終從輸入字段進行讀取。任何幫助讚賞。

+0

難道是因爲你正在爲getStatuses設置一個間隔調用,因此每次調用時都會重新執行代碼,因此每次都從輸入框中獲取文本。 – 2013-04-11 20:56:00

+0

您可以禁用輸入或其他...按照您的功能方式,您只需點擊一次即可調用它n次 – Hackerman 2013-04-11 20:57:17

+2

因此,每次用戶單擊輸入或提交查詢時,它都會增加間隔?您應該在getStatusesX函數中將其指定爲var和clearInterval(var) – 2013-04-11 21:00:39

回答

2

這不是一個官方的答案 - 只是想清理我的意見

這就是我的意思是在函數外聲明...

var intervalstop; 

function getStatusesX() { 
    clearInterval(intervalstop); 

    var userID = document.getElementById("userid").value; 
    getStatuses(userID); 
    intervalstop = setInterval(function() {getStatuses(userID);}, 20000); 

} 

這樣你初始化var和內您首先清除的功能,以確保它不復合。然後,將var設置爲新的時間間隔以重新開始。

你說twitter不喜歡這個代碼的東西,如果用戶點擊很多次 - 非常有意義。他們會想要限制API以防止某人由於不正確編碼而每分鐘發出50,000個請求。您應該檢查API規範以確保您處於現實區域內,並考慮在本地緩存結果(如果您正在推進邊界)。

1

問題在於,每次調用getStatuses時都要重新讀取文本框的值。

先嚐試捕捉文本框的值,並將其傳遞到您的getStatuses功能:

因此新getStatusesX是:

function getStatusesX() { 
    var userID = document.getElementById("userid").value; 
    getStatuses(userID); 
    setInterval(function() { 
     getStatuses(userID); 
    }, 20000); 
} 

更新getStatuses採取userid參數和刪除行,其中你正在讀取getStatuses中的文本框的值。

如前所述,這可能是一個問題,如果有可能開始 - 如果用戶單擊按鈕多次自動刷新狀態會怎麼樣?您可能想要在點擊按鈕/文本框後禁用它,或者先清除舊的時間間隔。

+0

我已經編輯了我上面的代碼給你的建議。在應用更改後,它並未執行getStatusesX()。 – user1835504 2013-04-11 21:46:32

+0

其實很好,只是混合了我的java和javascript語法。不幸的是,當按鈕或輸入被多次點擊時,我現在有問題。 Twitter不喜歡那樣。謝謝您的幫助。 – user1835504 2013-04-11 22:31:10

相關問題