2014-11-03 83 views
1

我打算在JavaScript中調用一個函數,然後在單擊一個<input type="image">後調用Servlet。從JavaScript調用Servlet

JSP:

<head> 
    <script type="text/javascript"> 
     function callServlet() { 
      document.location.href="test-servlet.jsp"; 
     } 
    </script> 
</head> 

<body> 
    <form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post"> 
    ... 
    <input type="image" name="submit" 
     src="https://www.paypalobjects.com/webstatic/en_US/btn/btn_buynow_pp_142x27.png" 
     onclick="callServlet()" alt="PayPal - The safer, easier way to pay online!"> 
    </form> 
</body> 

的Servlet(test-servlet.jsp):

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    response.setContentType("text/html"); 

    PrintWriter out = response.getWriter(); 

    out.println("<h1>TestServlet called successfully!</h1>"); 
} 

上下文根: http://localhost:8080/mysite/test-servlet.jsp

然而,當我點擊圖像按鈕,沒有任何反應。我是JavaScript新手。

+0

你可以使用jquery而不是使用javascript。是否有任何具體要求限制您只使用JavaScript? – Rockstar 2014-11-03 11:32:26

+1

@Rockstar jQuery如何幫助解決這個問題:)? http://meta.stackexchange.com/questions/45176/when-is-use-jquery-not-a-valid-answer-to-a-javascript-question – 2014-11-03 11:34:56

+2

你有什麼打算?表單正在PayPal上提交,並且您嘗試在點擊提交時修改位置(**競爭條件**)。同樣,更改位置會生成GET請求,但是您的servlet正在處理POST ...因此,您提供的代碼存在多個問題。 – 2014-11-03 11:36:54

回答

1

試試這個代碼

<a href="#" onclick="callServlet()"><img 
    src="https://www.paypalobjects.com/webstatic/en_US/btn/btn_buynow_pp_142x27.png" 
    alt="PayPal - The safer, easier way to pay online!"></a> 

編輯:

最後,我們發現了一個servlet應該不帶擴展名映射和doGet方法用於獲取從JavaScript請求。

+0

我想他正試圖訪問URL'test-servlet'而不是action屬性中的那個 – 2014-11-03 11:36:13

+0

@SanKrish他想要一個圖像按鈕轉到一個jsp頁面 – 2014-11-03 11:38:12

+0

,但他的標題暗示_Calling Servlet from JavaScript_ :( – 2014-11-03 11:39:12

1

我可以在你的jsp中看到多個錯誤。

首先,

<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post"> 

而且還使用了img標籤與button爲羅馬說

action的URL被調用時,當你的表單提交

所以嘗試替換它,

<form action="./test-servlet" method="post"> 

和現在使用你的JavaScript,

你不能使用window.location.href作出POST請求。檢查pass post data with window.location.href

<script type="text/javascript"> 
    function callServlet() { 
     document.forms[0].submit; 
    } 
</script> 
+0

嗨,https:// www.sandbox.paypal.com/cgi-bin/webscr會重定向到必需的PayPal沙箱網站。我想調用另一個測試servlet的原因是它設置了一個布爾型「isPaypalButtonClicked」。那可能嗎? – silver 2014-11-03 11:48:51

+0

所以你希望它保持在同一頁面?如果是這樣的話,使用ajax來爲你做工作 – 2014-11-03 11:49:51

+0

不幸的是,我們不允許觸摸AJAX到目前爲止。 jQuery和JS是允許的(但最小)。 – silver 2014-11-03 11:53:06