일반적으로 우리는 렌더링 된 페이지 (예 : JSP)를 반환하는 아약스 호출을 원하지 않습니다. 따라야 할 것이 있습니다. RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1 다음은 내가 작업중인 프로젝트의 컨트롤러입니다.
@Controller
public class MilestoneController extends BaseRESTController {
protected static final String ACCEPT_JSON = "Accept=application/json";
@Resource private GuidelineService _guidelineService;
@RequestMapping(value="/guideline/{id}/milestones", method= RequestMethod.GET, headers=ACCEPT_JSON)
public @ResponseBody List<Milestone> getMilestones(@PathVariable("id") Long guidelineId) {
return _guidelineService.getGuideline(guidelineId).getMilestones();
}
@RequestMapping(value="/guideline/{id}/milestones/new", method= RequestMethod.GET, headers=ACCEPT_JSON)
public @ResponseBody Milestone addMilestones(@PathVariable("id") Long guidelineId) {
return _guidelineService.newMilestone(guidelineId);
}
@RequestMapping(value="/guideline/{id}/milestones", method={RequestMethod.POST, RequestMethod.PUT}, headers=ACCEPT_JSON)
public @ResponseBody ResponseEntity<String> updateUpdateMilestone(@PathVariable("id") Long guidelineId, @RequestBody Milestone milestone) {
_guidelineService.updateMilestone(guidelineId, milestone);
return new ResponseEntity<String>(HttpStatus.ACCEPTED);
}
}
@ResponseBody를 사용하여 classpath에 jackson이 있으면 JSON으로 반환 값을 렌더링합니다. @RequestBody는 클라이언트의 POST 및 PUT json을 허용합니다. 내 updateUpdateMilestone() 메서드에서는 값을 반환 할 필요가 없도록 어떻게 202 (HttpStatus.ACCEPTED)를 반환하는지 알 수 있습니다.
는 @Sotirios가
$.ajax({
type: "POST",
url: someUrl,
data: someData,
success: function(data){
windows.href.location = someNewLocation;
},
error: function(X) {
}
});
당신의 컨트롤러 방법은
@RequestMapping(value="/somePage", method={RequestMethod.POST},
headers="Accept=application/json")
public @ResponseBody String doStuff(@RequestBody SomeObject obj) {
// do stuff here....
return "viewName"
}
@ResponseBody없이 컨트롤 이름으로 뷰를 렌더링하기 위해 노력할 것입니다 무언가 같이 할 필요가 게시 된 것을 사용합니다.
HTTP 응답 본문이 전송 된 것과 관계없이 브라우저는 현재 위치에서 someNewLocation으로 이동합니다. –
많은 HTML을 반환하지 않습니다. 즉, 렌더링 된 JSP – denov
당신은 그것을 바꿔 말할 수 있습니까? 컨트롤러가 XML, HTML, JSON 또는 바이너리 데이터를 반환하는지 여부에 관계없이 ajax 함수는 '데이터'의 내용을 무시합니다. 그래서 그 의미에서, 그것은 정말로 중요하지 않습니다. –