我是UI的新手,我们正在尝试使用JQuery实现一个Web调用,我们有观察者一个奇怪的webcall问题,即,当我们尝试进行post http调用时,我们在服务器访问日志中有观察者首先进行http post调用,然后立即进行一次http get调用。
请在下面找到.jsp页面:
<html>
<head>
<script type="text/javascript"
src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
<%
String urlVal = (String) request.getAttribute("dataURL");
%>
<%
String emailID = (String) request.getAttribute("emailID") ;
%>
<script type="text/javascript">
var url="<%=urlVal%>";
alert(url);
function navigateWithForm() {
var form = $('<form></form>');
form.attr({
method: 'POST',
action: url
});
form.append(getInput());
form.appendTo('body').submit();
}
function getInput() {
alert("<%=emailID%>");
return $('<input type="hidden" />').attr({
name: 'header',
value: '<%=emailID%>'
});
}
$(document).ready(function() {
navigateWithForm();
});
</script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
</html>
在后端,服务部署在weblogic中,它是在spring 2.5框架中设计的。我们有apache代理服务器用于负载平衡。
任何帮助将不胜感激。
答案 0 :(得分:2)
你的问题中的代码没有什么特别的错误(除非你真的想使用AJAX,但我觉得这是一个不同的问题)。
您的服务器端代码似乎正在实施典型的Post/Redirect/Get请求处理模式。
以下是正在发生的事情
Browser | Server
----------------------|-----------------------------
create form |
action=urlVal |
method=POST |
|
submit form |
POST "urlVal" -------->
|
| Process request
|
<--- Response
| 302 Found
| Location: someUrl
|
GET "someUrl" ---------->
|
<--- Response
| 500 Internal Server Error
因此,您的服务器端代码添加到302 Found
响应的Location
标头的网址无法处理该响应产生的GET
请求。您需要修改服务器端代码以处理GET请求或使用不同的Location
进行响应。
例如(Spring MVC),说你的urlVal
是"/foo"
并且你有
@RequestMapping("/foo")
public String handleFoo(@RequestParam String header) {
// process, etc
return "redirect:/foo";
}
返回重定向响应,告诉客户端(浏览器)通过响应标头执行GET
请求...
302 Found
Location: /foo
注意该方法如何需要header
请求参数。
浏览器将尝试通过GET请求/foo
,这将失败,因为没有带参数的请求体(即没有header
)。
解决方案是:
GET
请求处理您要重定向到
的网址的GET
次请求
@RequestMapping(path = "/foo", method = RequestMethod.GET)
public String getFoo() { // note, no required parameters
// etc
}
或
以不同的方式回应。即使空洞的反应也很好
@RequestMapping("/foo")
@ResponseBody
public ResponseEntity<Void> handleFoo(@RequestParam String header) {
// process, etc
return ResponseEntity.ok().build();
}
答案 1 :(得分:0)
经过多日的努力,我找到了问题的解决方案。这真的是一个很小的变化。希望该解决方案对于正在努力解决该问题的其他人有用。实际问题是Jquery调用的url / action。
之前传递的网址
上下文:根参数1 =值安培; param2的= 2
传递的正确网址是
上下文:?根/参数1 =值安培; param2的= 2
感谢Phil,我必须看到请求和响应的标题以及其他位置,来源和引荐来源