0

我的 html 表单上的输入有问题。目前,我正在将 twitter 名称的输入输入到 Ajax 函数中,该函数通过 php 从 twitter api 调用推文。

问题是,如果输入为空或输入不是有效的推特帐户,它会执行对推特 api 的 php 调用,并返回一条错误消息。

如果 twitter 帐户不存在或输入为空,如何停止 Ajax 运行?php端会发生什么事情吗?

这是输入的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>

接受输入并连接到 php 的脚本:

var intervalstop;

function getStatusesX() {
    //trying to stop an empty input from executing but not working  
  if(input == ""){
           alert("PLease enter a Twitter ID");
       return false;
       } 

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

}

//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();
    //var userID = document.getElementById("userid").value;

    //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);
}
4

3 回答 3

3

input没有在任何地方定义。移动这一行:

var userID = document.getElementById("userid").value;

然后检查是否userID为空:

function getStatusesX() {

   var userID = document.getElementById("userid").value;

   if(userID === ''){
       alert("Please enter a Twitter ID");
       return false;
   } 

   clearInterval(intervalstop);
   getStatuses(userID);
   intervalstop = setInterval(function() {getStatuses(userID);}, 20000);

}
于 2013-04-23T18:24:44.963 回答
2

你做了检查,input但你没有在任何地方定义这个。改为检查用户 ID

function getStatusesX() {

   clearInterval(intervalstop);
   var userID = document.getElementById("userid").value;

    //trying to stop an empty input from executing but not working  
    if(userID == ""){
           alert("PLease enter a Twitter ID");
       return false;
       } 


   getStatuses(userID);
   intervalstop = setInterval(function() {getStatuses(userID);}, 20000);

}
于 2013-04-23T18:25:33.913 回答
1

正如之前的回复所述,对于空输入案例,您正在检查一个未定义的变量。

至于检查输入是否是有效的推特用户,它必须在服务器端完成。例如,您的“TwitterGlimpsePHP.php”脚本可能会执行此检查,如果用户无效,则返回特殊的 http 状态。您可以使用 4XX http 状态,但我不确定哪个是最相关的(可能是 400 表示错误请求)。

最后的修改是更改 getStatutes 函数以检查服务器响应:

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

    XMLHttp1 = getXMLHttp();
    //var userID = document.getElementById("userid").value;

    //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;
            } else if (XMLHttp1.status ==400 ) {
                // The user was not valid. Stop refresh.
                clearInterval(intervalstop);
            }
        }
    }
    XMLHttp1.send(null);
}

编辑服务器端:

您提供的服务器端脚本似乎没有检查 twitter statut(我不是 php 专家,更多的是 java/.net 开发,所以我可能错了)。对于无效用户,twitter 会做出不同的回答。例如,查看https://api.twitter.com/1/statuses/user_timeline/fdfsfsfsfsdf.xml你会看到:

<errors>
    <error code="34">Sorry, that page does not exist</error>
</errors>

您的 php 脚本必须检查来自 twitter 的此类响应,然后返回 http 状态。你可以看看这个问题来了解如何设置 http 状态:Set Response Status Code。我希望这些解释对你有所帮助。

于 2013-04-23T18:48:51.267 回答