更新开始
oooooops,我刚刚发现这不是 get & post 问题,而是 SpringMVC RequestMapping & trailing slash & http 302 问题。
当调用/editor get-request 时,302
返回,响应位置是/editor/,
但如果我更改@RequestMapping("editor")
为EditorController
,@RequestMapping("anyWords")
那么一切正常。
所以问题是为什么在正常工作@RequestMapping("editor")
时会有斜杠问题@RequestMapping("anyWords")
。
更新结束
我只是想调用一个简单的 ajax-post 请求,但被奇怪的行为弄糊涂了。
我声明了 ajax 类型:“post”,但如果我不给 url 一个“/”后缀,如“/editor”而不是“/editor/”,结果将始终是“get”请求。
是否必须在“发布”请求中添加“/”后缀?
这是一些conf和代码
SpringMVC 控制器
@Controller
@RequestMapping("/editor")
public class EditorController {
@RequestMapping(method = RequestMethod.GET)
public ModelAndView getEditor() {
return new ModelAndView("/WEB-INF/editor.jsp");
}
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public String saveEditor(Article article) {
// some code
return "something";
}
}
js函数调用ajax请求
MyShare.editor = {
checkAndSubmit : function(){
var title = $("#title").val();
var author = $("#author").val();
$.ajax({
url : "/editor/",
// problem here, without a '/' suffix,
// it will always call a get request.
// url : "/editor"
type : "POST",
data : {
'title' : title,
'author' : author
},
success : function(response){
// some code
},
error : function(response){
// some code
}
});
}
};
tomcat 插件
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat6-maven-plugin</artifactId>
<version>2.0-beta-1</version>
<configuration>
<url>http://localhost:8080/manager/html</url>
<server>tomcat-local</server>
<path>/</path>
<contextReloadable>true</contextReloadable>
</configuration>
</plugin>
</plugins>
我没有 10 个信誉来发布网络图像... :( 当我调用 js 函数时,它首先调用具有 code302 状态的 post 请求,然后调用具有 code200 状态的 get 请求,例如以下文字
name method status type initiator
editor POST 302 Pending jquery-2.0.3.js:7845
editor/ GET 200 text/html http://localhost:8080/editor
我刚刚创建了另一个测试控制器,一切正常。我的意思是没有“/”后缀,仍然可以调用 ajax-post 请求。
任何人都知道 EditorController 和 TestController 之间的区别
@Controller
@RequestMapping("/test")
public class TestController {
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public String get(String title) {
return "get : " + title;
}
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public String post(String title) {
return "post" + title;
}
}