0

我有以下发出请求的函数:

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
    };
}

该函数在服务器上触发一个方法,该方法基本上返回一个 ModelAndView 对象:

...   
ModelAndView mav = new ModelAndView("redirect:/recipies/edit?id=1");  
....  
return mav;  

成功完成发布请求后,完成以下 GET 请求: 在此处输入图像描述

因此,在请求的“预览”选项卡中,我有正确的页面应该重定向,但浏览器中没有重定向。该页面与最初调用 postIngredient() 函数的位置相同。那么如何进行重定向呢?

4

1 回答 1

1

您正在通过 Javascript 中的 XMLHttpRequest 对象发出 ajax 请求。此请求通过重定向得到响应,并且 XMLHttpRequest 对象跟随重定向,调用编辑,然后将结果(编辑页面的完整页面内容)发送到您的 xhr.onloadend() 方法。浏览器窗口本身不参与其中,也不知道重定向是在内部发送的。

如果您想将帖子保留为 xhr 请求并且不切换到标准表单帖子,您可以更改您的后处理方法以仅返回一个字符串:

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 代码中,从 resultdata 获取结果字符串并使用类似的内容重定向您的浏览器

window.location.href = dataFromResult;

注解防止 Spring将@ResponseBody返回的 String 解释为视图名称,并且将 String 包装在 a 中可以ResponseEntity让您在出现问题时返回错误代码。

于 2017-04-15T07:01:54.177 回答