2012-11-09 101 views
0

我有一個JavaScript函數,如果它成功更新數據庫,或者它有錯誤,我想向用戶報告警報消息。XMLRequest ResponseText爲空

在主X.JSP文件我有:

function startRequest(pChange) 
     { 

       //alert("startRequest"); 
       createXmlHttpRequest(); 
       //alert("sending message"); 
       //var u1=document.f1.user.value; 
       //alert("Running startRequest for: " + pChange.id); 
       //xmlHttp.open("GET","updateEntry.jsp&pID=pChange.id&pStatus=pChange.status&pAddress=pChange.address&pDate=pChange.date&pNotes=pChange.note&pAssigned=pChange.assigned" ,true) 
       xmlHttp.open("GET","updateEntry.jsp?pID=" + pChange.id + "&pAddress=" +pChange.address + "&pStatus=" + pChange.status +"&pNote=" + pChange.notes +"&pAssigned=" +pChange.assigned ,true) 
       //alert(xmlHttp.responseText); 
       xmlHttp.onreadystatechange=handleStateChange; 
       xmlHttp.send(null);   
     } 
function handleStateChange() 
     { 
      //alert("handleStateChange"); 
      var message = xmlHttp.responseText; 
      alert("Return Code:" + message); 
      if(xmlHttp.readyState==4) 
      { 
       if(xmlHttp.status==200) 
       { 
        //alert("test2"); 
        //alert("recieved Message"); 
        var message = xmlHttp.responseText; 
        alert(message); 
       } 
      } 
      else 
      { 
       alert("Error loading page"+ xmlHttp.status + 
      ":"+xmlHttp.statusText); 
      } 
     } 

我然後運行updateEntry.jsp的方法,做了一些事情,但令人感興趣的是這一部分:

if(nId.equals("NMI")||nId.equals("MI")||nId.equals("NI")||nId.equals("SA")||nId.equals("S")) 
      { 
       org.hibernate.Query query2 = session2.createQuery("update Leads set Status = :nstatus where Id = :nid"); 
       query2.setParameter("nid", nId); 
       query2.setParameter("nstatus", nstatus); 
       query2.executeUpdate(); 
       out.println("Update successfully with: " + nstatus); 
       // Actual contact insertion will happen at this step 
       session2.flush(); 
       session2.close(); 
      } 
      else 
      { 
       out.println("Status must be: NMI, MI, NI, SA or S");   
      } 

我的理解是,如果函數成功完成,這應該只會創建一個警報。相反,它創建了9個警報,全部都是空白的。我究竟做錯了什麼?我看到「返回代碼:」消息和一個空白消息(兩個不同的代碼段),但都輸出空白消息變量。

回答

0

如果readystate不是4,這並不意味着它是一個錯誤。 Ajax有多個狀態,通知客戶端發生了什麼事情。你的代碼說這些連接狀態都是錯誤的。

 if(xmlHttp.readyState==4) 
     { 
      if(xmlHttp.status==200) 
      { 
       //alert("test2"); 
       //alert("recieved Message"); 
       var message = xmlHttp.responseText; 
       alert(message); 
      } <-- your else should most likely be up here 
     } 
     else <-- this is incorrect 
     { 
      alert("Error loading page"+ xmlHttp.status + 
     ":"+xmlHttp.statusText); 
     } 

MDN - Ajax Getting Started

+0

是閱讀文檔,我跟你同意這一觀點,但是這不是真的我期待解決的問題。爲什麼我不能將消息傳遞到xmlHttp.reponseText中? – user1754659

+0

它擴大了所有的警報。你看過服務器返回的內容嗎?使用像Fiddler或Firebug這樣的工具來查看請求。 – epascarello