我的html表单上的输入有问题。我肯定将输入的Twitter名称转换为Ajax函数,该函数通过php从twitter api调用tweet。
问题是,如果输入为空或输入不是有效的Twitter帐户,则执行对twitter 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);
}
答案 0 :(得分: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);
}
答案 1 :(得分: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);
}
答案 2 :(得分:1)
如前所述,对于空输入案例,您正在检查未定义的变量。
至于检查输入是否是有效的Twitter用户,必须完成服务器端。例如,您的“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。我希望这些解释对你有帮助。