我在"home.jsp“页面中编写了一个Ajax脚本,它将请求对象委托给"like.jsp”页面,然后调用一个返回布尔值的servlet方法。我试图在html元素(<‘span’>标记)中显示这个布尔值.下面是Ajax脚本:
<script type="text/javascript">
function like()
{
alert('g');
var i = "a1eec";
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
try{
xmlhttp.onreadystatechange=getInfo;
xmlhttp.open("GET","like.jsp?q="+i,true);
xmlhttp.send();
}
catch(e){
alert("Unable to connect to server");
}
}
function getInfo(){
if(xmlhttp.readyState==4){
//alert('p');
var val=xmlhttp.responseText;
document.getElementById("flike").innerHTML=val;
}
else if(xmlhttp.readyState!=4)
{
//alert('t');
document.getElementById("flike").innerHTML=val;
}
}
like.jsp页面代码:
<body>
<%
System.out.print("IT IS LIKE>JSP");
String name = (String)session.getAttribute("email");
String text_id = request.getParameter("q");
boolean flag = service1.likes(text_id, name);
if(flag)
out.print(flag);
else
System.out.println("Not");
//response.sendRedirect("home.jsp");
%>
var‘val’的值没有显示在所需的元素中。我已经测试了servlet和like.jsp页面,给出了手动输入,没有问题,只是为了防止出现任何错误。
提前感谢!
发布于 2015-07-04 11:35:00
您的xmlhttp变量超出范围。
如果我定义一个函数并在其中创建变量,那么这些变量就会成为本地作用域。任何本地作用域项在全局范围内都是不可见的,除非公开,这意味着如果我在新范围内定义函数或变量,则在当前作用域之外是不可访问的。
通过在like()中定义它,您在like()之外限制了它的使用,并且它在getInfo()中显示为undefined。
将变量声明移出like()函数,如下所示:
var xmlhttp;
function like() {
var i = "a1eec";
if (window.XMLHttpRequest) {
xmlhttp=new XMLHttpRequest();
}else{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
//...
}
function getInfo(){
console.log(xmlhttp)
//...
}工作小提琴。
https://stackoverflow.com/questions/31219529
复制相似问题