2013-07-02 3 views
1

Что не так с этим кодом AJAX? Он должен изменить состояние кнопки для включения или отключения в зависимости от условий.AJAX не меняет мой JSP динамически?

function loadXML(){ 
var xmlhttp; 
if (window.XMLHttpRequest) 
{ 
    xmlhttp = new XMLHttpRequest(); 
} 
else 
{ 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
} 

xmlhttp.onreadystatechange=function() 
{ 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
     { 
      /* alert (xmlhttp.responseText); */ 
      if(xmlhttp.responseText == true) { 
       document.getElementById('scan').disabled=false; 
       document.getElementById('secret').value = "true"; 
      } 
      else if(xmlhttp.responseText == false){ 
       document.getElementById('scan').disabled=true; 
       document.getElementById('secret').value = "false"; 
      } 
     } 
} 
xmlhttp.open("GET", "ScanJobServlet", true); 
xmlhttp.send(); 
} 

setInterval("loadXML()", 5000); 

Эта функция выполняется каждые 5 секунд, чтобы проверить, есть ли изменения в ответе сервлета.

Вот мой сервлет: у него есть прослушиватель событий, который, когда я подключаю USB, ответ становится истинным, и если я отсоединяю USB, ответ становится ложным.

protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
    throws ServletException, IOException { 
    // TODO Auto-generated method stub 
    //super.doGet(req, resp);  

    PrintWriter out = resp.getWriter(); 

    RemovableStorageEventListener listener = new RemovableStorageEventListener() 
    { 
     public void inserted(Storage storage) { 
      status = true; 
    } 
     public void removed(Storage storage) { 
      status = false; 
     } 
    }; 

    BundleContext bc = AppManager.getInstance().getBundleContext(); 
    StorageManager sm = StorageManager.getInstance(KSFUtility.getInstance().getApplicationContext(bc)); 
    sm.addListener(listener); 

    if (status==true) 
    { 
     out.print("true"); 
    } 
    else 
    { 
     out.print("false"); 
    } 

} 
+0

1) Что такое предупреждение о значении? 2) У вас есть элемент с идентификатором «сканирование» и «секрет»? – kosa

+0

Я уже получил код, но у меня есть вопрос ... будет AJAX продолжать идти внутрь 'if (xmlhttp.readyState == 4 && xmlhttp.status == 200)' каждый раз, когда прослушиватель событий запускается в сервлет ? – pmark019

ответ

1

В этом коде

if (status==true) 
    { 
    out.print("true"); 
    } 
else 
    { 
    out.print("false"); 
    } 

Вы возвращаете буквального "true" и "false". Попробуйте использовать true и false без кавычек. В JavaScript "true" и "false" отличаются от true и false, так как двойные кавычки указывают буквально. Обновлено:

if (status==true) 
    { 
    out.print(true); 
    } 
else 
    { 
    out.print(false); 
    } 
+0

спасибо ... У меня есть еще один вопрос ... будет ли код AJAX продолжать идти внутри 'if (xmlhttp.readyState == 4 && xmlhttp.status == 200)' каждый раз, когда активируется прослушиватель событий? – pmark019

+0

@ pmark019 Он должен, так как вы добавили прослушиватель событий, он должен активироваться каждый раз, когда он готов, просто как 'onclick' запускает функцию столько раз, сколько нажал. – slice

0

В вашем яваскрипта коде, попробуйте следующее:

(xmlhttp.responseText == "true") 

вместо

(xmlhttp.responseText == true) 

же для (xmlhttp.responseText == ложь), изменить его для (xmlhttp.responseText == "false") (с кавычками)