2014-11-03 87 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