2010-03-22 55 views
1

問題如何使用ajax將XML轉換爲HTML下拉列表?我用GET方法發送參數,但生成XML的JSP文件沒有收到它。我發現發送接收參數

var url = "responsexml.jsp"; 
url = url + "?projectCode=" + prj.options[prj.selectedIndex].value; 
xmlhttp.onreadystatechange=stateChanged; 
xmlhttp.open("GET", url, true); 
xmlhttp.send(null); 

然後在responsexml.jsp我做這樣的:

<% 
    String projectcode = (String) request.getParameter("projectCode"); 
    System.out.println("++++projectCode:=" + projectcode); 
    Session s = null; 
    Transaction tx;  

    try { 
     s = HibernateUtil.currentSession(); 
     tx = s.beginTransaction(); 
     Query query = s.createQuery("SELECT from Wa wa where wa.ProjectCode='" + projectcode + "'"); 
     response.setContentType("text/xml"); 
     PrintWriter output = response.getWriter(); 
     output.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>"); 
     //response.setHeader("Cache-Control", "no-cache"); 

     if (projectcode != null) { 
      for (Iterator it = query.iterate(); it.hasNext();) { 
       if (it.hasNext()) { 
        Wa object = (Wa) it.next(); 
        //out.print("<item id=\"" + object.getIdWA() + "\" name=\"" + object.getWAName() + "\" />"); 
        output.write("<wa>"); 
        output.write("<item id=\"" + object.getIdWA() + "\" name=\"" + object.getWAName() + "\" />"); 
        output.write("</wa>"); 
       } 
      } 
     } 
    } catch (HibernateException e) { 
     e.printStackTrace(); 
    } 
%> 
</body> 
</html> 

有了這個代碼,我沒有我的XML文件。我得到這個錯誤:

The server did not understand the request, or the request was invalid. Erreur de traitement de la ressource http://www.w3.o ...

回答

1

可以肯定的:是,整個 JSP文件?錯誤信息即表明你已經在它的頂部有一個<!DOCTYPE>,它指向w3.org上的一個DTD,但是相關的瀏覽器無法加載它。錯誤消息也表明您使用IE來測試這一切,這個瀏覽器對於從http://localhost打開XML文件已知具有奇怪的限制和怪癖。請嘗試使用更體面的網頁瀏覽器,例如Firefox

而且在我發現幾個缺點在這種方法:

  1. </body></html>真的不會在JSP的底部屬於那裏。刪除它們。
  2. JSP是這個工作的錯誤工具。使用Servlet。
  3. if (it.hasNext())這一塊是多餘的,因爲它已經由for聲明處理。
  4. XML應該有一個根元素。現在你正在寫多個<wa>元素。
  5. SQL很容易出現SQL注入攻擊。使用命名查詢。

不是一個真正的問題,但更多的是建議,我建議看看jQuery火ajaxical請求並做DOM操作在一個不錯的,簡潔和crossbrowsercompatible方式。