ModelAndView 不重定向,但给出正确的响应
ModelAndView does not redirect, but give correct response
我有以下发出请求的函数:
function postIngredient(action, options) {
var xhr = new XMLHttpRequest();
xhr.open(options.method, action, true);
xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
xhr.setRequestHeader(options.security.header, options.security.token);
// send the collected data as JSON
xhr.send(JSON.stringify(options.params));
xhr.onloadend = function () {
// done
};
}
该函数在服务器上触发一个方法,基本上 returns 一个 ModelAndView 对象:
...
ModelAndView mav = new ModelAndView("redirect:/recipies/edit?id=1");
....
return mav;
在 post 请求成功完成后,以下 GET 请求完成:
因此,在请求的 'Preview' 选项卡中,我有正确的页面应该重定向到的位置,但浏览器中没有重定向。该页面在最初调用 postIngredient() 函数的位置保持不变。那么如何进行重定向呢?
您正在通过来自 Javascript 的 XMLHttpRequest 对象发出 ajax 请求。该请求通过重定向进行响应,XMLHttpRequest 对象遵循重定向,调用编辑,然后将其结果(编辑页面的完整页面内容)发送到您的 xhr.onloadend() 方法。浏览器 window 本身不参与其中,并且不知道内部发送了重定向。
如果您想将 post 保留为 xhr 请求并且不切换到标准格式-post 您可以将 post 处理方法更改为仅 return 一个字符串:
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ResponseBody;
@ResponseBody
public ResponseEntity<String> myPostProcessingIngredientsMethod(..put args here...) {
... do something ...
return new ResponseEntity<>("/recipies/edit?id=1", HttpStatus.OK));
}
然后在您执行 xhr 请求的 Javascript 代码中,从结果数据中获取结果字符串并使用类似
的内容重定向您的浏览器
window.location.href = dataFromResult;
@ResponseBody
注释阻止 Spring 将 returned 字符串解释为视图名称,并将字符串包装在 ResponseEntity
中使您可以 return 出现问题时的错误代码。
我有以下发出请求的函数:
function postIngredient(action, options) {
var xhr = new XMLHttpRequest();
xhr.open(options.method, action, true);
xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8');
xhr.setRequestHeader(options.security.header, options.security.token);
// send the collected data as JSON
xhr.send(JSON.stringify(options.params));
xhr.onloadend = function () {
// done
};
}
该函数在服务器上触发一个方法,基本上 returns 一个 ModelAndView 对象:
...
ModelAndView mav = new ModelAndView("redirect:/recipies/edit?id=1");
....
return mav;
在 post 请求成功完成后,以下 GET 请求完成:
因此,在请求的 'Preview' 选项卡中,我有正确的页面应该重定向到的位置,但浏览器中没有重定向。该页面在最初调用 postIngredient() 函数的位置保持不变。那么如何进行重定向呢?
您正在通过来自 Javascript 的 XMLHttpRequest 对象发出 ajax 请求。该请求通过重定向进行响应,XMLHttpRequest 对象遵循重定向,调用编辑,然后将其结果(编辑页面的完整页面内容)发送到您的 xhr.onloadend() 方法。浏览器 window 本身不参与其中,并且不知道内部发送了重定向。
如果您想将 post 保留为 xhr 请求并且不切换到标准格式-post 您可以将 post 处理方法更改为仅 return 一个字符串:
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ResponseBody;
@ResponseBody
public ResponseEntity<String> myPostProcessingIngredientsMethod(..put args here...) {
... do something ...
return new ResponseEntity<>("/recipies/edit?id=1", HttpStatus.OK));
}
然后在您执行 xhr 请求的 Javascript 代码中,从结果数据中获取结果字符串并使用类似
的内容重定向您的浏览器window.location.href = dataFromResult;
@ResponseBody
注释阻止 Spring 将 returned 字符串解释为视图名称,并将字符串包装在 ResponseEntity
中使您可以 return 出现问题时的错误代码。