没有显示Ajax responseText

时间:2015-07-04 10:25:01

标签: javascript ajax

我在" 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&#39; val &#39;的值未显示在所需元素中。 我已经测试了servlet和like.jsp页面给出了手动输入,没有问题,但万一你发现出现了什么问题。

提前致谢!

1 个答案:

答案 0 :(得分:0)

你的xmlhttp变量is out of scope

  

如果我定义一个函数并在其中创建变量,那些变量   成为本地范围。任何本地范围的项目都不可见   全局范围 - 除非暴露,这意味着如果我定义函数或   新范围内的变量,除此之外无法访问   目前的范围。

通过在like()中对其进行定义,您将其限制在like()之外,并在undefined中显示为getInfo()

将变量声明移到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)
    //...
}

Working fiddle