2015-07-04 7 views
0

Я написал сценарий Ajax на странице «home.jsp», который делегирует объект запроса на страницу «like.jsp», которая затем вызывает метод сервлета, возвращающий значение boolean. Я пытаюсь отобразить это логическое значение в элементе html (< 'span'>). Вот сценарий Ajax:Ajax responseText не отображается

<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"); 
%> 

Значение переменной не отображается значение "вал 's в желаемом элементе. Я проверил сервлет и страницу like.jsp, введя ручной ввод, и нет никаких проблем, но на всякий случай вы заметите, что что-то не так.

Заранее благодарен!

ответ

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.

+0

Спасибо, Майкл за то, что указал на ту глупую ошибку, которую я сделал там. Я пошел косоглазый, ища проблему, но теперь ее рабочий ... снова! :) –

+0

@HarshVardhan Вы можете принять/принять участие, если это поможет. ;) –

Смежные вопросы