spring mvc controller不能处理纯粹的ajax

时间:2017-09-01 12:14:42

标签: jquery json ajax spring-mvc

我在服务器端有下一个控制器方法:

@RequestMapping(value = {"/templates/test"}, method = 
RequestMethod.POST, consumes = "application/json")
    @ResponseBody
    public String TestURL(@RequestBody List<String> testString,
                          Model model,
                          Locale locale) {
        return testString.toString();
    }
UI上的

前提条件(java脚本):

var statList = [];
            statList.push('aaa');
            statList.push('bbb');
var strList = JSON.stringify(statList);

以及从客户端调用它的两种方法:

1)通过jQuery:

        $.ajax({
            type: "POST",
            contentType: 'application/json; charset=utf-8',
            dataType: 'text',
            url: "/templates/test",
            data: strList,
            success: function (result) {
                alert(result.responseText);
            },
        });

- 运作良好。控制器处理请求。

2)通过纯AJAX:

        var myReq = new XMLHttpRequest();
        myReq.setRequestHeader("Content-Type", "application/json; charset=utf-8");
        myReq.open("POST", "/templates/test", false);
        myReq.responseType = 'text';
        myReq.send(strList);

- 不起作用。控制器不处理请求。方法TestURL根本没有被调用。你能帮我解决第二个请求,以便能够在控制器上处理它吗?或建议正确的春季版本?我的春季版是4.3.7。

P.S。下一个代码运行良好,但它不是我想要的。我需要解析为List {String}:

控制器:

@RequestMapping(value = {"/templates/test"}, method = RequestMethod.POST) // , consumes = "application/json"
@ResponseBody
public String TestURL(@RequestBody String testString,
                      Model model,
                      Locale locale) {
    return testString;
}

UI:

var myReq = new XMLHttpRequest();
                //myReq.setRequestHeader("Content-Type", "application/json; charset=utf-8");
                myReq.open("POST", "/templates/test", false);
                myReq.send("aaaa");

1 个答案:

答案 0 :(得分:0)

问题很简单:纯粹的ajax请求是错误的。在打开请求之前不允许调用setRequestHeader。除此之外,如果调用responseType,则async应为true