2015-04-26 66 views
2

我正在編寫一個應用程序,它能夠計算公式中編寫的數字。在HTML我已經把這:使用Ajax的Servlet - POST可以工作,但GET不會

<input type="text" size="20" id="number2" onblur="validate2()" 
    onFocus = "document.getElementById('msg2').innerHTML = ' '"> 
<br> 
<div id = "message1">&nbsp</div> 

我創建了一個JavaScript這首先驗證DATAS後來將它們插入到「答案配方」:

function validate2() { 
var idField2 = document.getElementById("number2"); 
var data2 = "number2=" + encodeURIComponent(idField2.value); 
if (typeof XMLHttpRequest != "undefined") { 
    req = new XMLHttpRequest(); 
} else if (window.ActiveXObject) { 
    req = new ActiveXObject("Microsoft.XMLHTTP"); 
} 
var url = "Validator" 
req.open("GET", url, true);   
req.onreadystatechange = inserter2 
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") 

; 
    req.send(data2); 
} 

function inserter2() { 
    if (req.readyState == 4) { 
     if (req.status == 200) { 
      var msg1 = req.responseText 
      if (msg1 == "") { 
       document.getElementById("message1").innerHTML = "<div style=\"color:red\">Zła nazwa</div>"; 
       document.getElementById("org").value = '' 
      } 
      else 
       document.getElementById("org").value = msg2 
     } 
    } 
} 

這裏是我的代碼中正在發送它的doGet:

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    System.out.println("GET"); 

    response.setContentType("text/html"); 
    Writer out = response.getWriter(); 
    String num2 = request.getParameter("number2"); 
    System.out.println(num2); 
    String org = new String(); 
    if(num2.matches("[\\p{Punct}\\d]+")) { 
     ScriptEngineManager mgr = new ScriptEngineManager(); 
     ScriptEngine engine = mgr.getEngineByName("JavaScript"); 
     try { 
      org = engine.eval(num2).toString() + " (" + request.getMethod() + ")"; 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
    out.write(org != null ? org : ""); 
} 

如果我們改變所有這些東西進入後,該代碼將工作,但現在它是GET,它不會在所有的工作。另一個奇怪的情況是,使用POST的公式可以讀取公式中的書面內容,但由於我們使用的是GET,因此程序將公式源視爲null。

回答

1

如果您將其作爲get發送,則需要將公式應用於請求。此表達式:

req.send(data2); 

在您發送GET請求時沒有意義,因爲除請求字符串外,GET請求不能包含任何有效內容。所以你必須添加有效載荷到你的網址。類似這樣的:

var url = "Validator/?" + data2; 
req.open("GET", url, true);   
req.onreadystatechange = inserter2; 
req.send(); 

希望有所幫助。

+0

我檢查你的代碼,但它不爲我工作:( 還是同樣的問題。 – Ganjira

+0

能否請您分享您在github上什麼應用程序,所以我可以用它玩?我無法重現這個問題,也許它隱藏在代碼中的某處,這個問題沒有列出。 – Maks

相關問題