当我将 Ajax 与 spring 控制器一起使用时,它会被重定向 [重复]

Posted

技术标签:

【中文标题】当我将 Ajax 与 spring 控制器一起使用时,它会被重定向 [重复]【英文标题】:When I use Ajax with spring controller it's redirected [duplicate] 【发布时间】:2021-11-27 14:28:06 【问题描述】:

所以,我尝试创建一个 Spring MVC 应用程序,例如“Cinema”应用程序。 我将 RestController 与 Get 方法一起使用,生成类似 JSON 的响应。

private SessionService sessionService;

public SessionController(SessionService sessionService) 
    this.sessionService = sessionService;


@GetMapping(value = "/test")
public String getSearchField() 
    return "sessionsSearching";



@GetMapping(value = "/search", consumes = MediaType.ALL_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody
String searching(@ModelAttribute("filmName")String request) 
    List<Session> serviceResponse = sessionService.searchByRequest(request);
    JSONArray sessionsJson = new JSONArray();
    for (Session s : serviceResponse) 
        JSONObject filmJson = new JSONObject();
        filmJson.put("name", s.getFilm().getTitle());
        JSONObject sessionJson = new JSONObject();
        sessionJson.put("id", s.getId());
        sessionJson.put("dateTime", s.getDate());
        sessionJson.put("film", filmJson);
        sessionsJson.add(sessionJson);
    
    return sessionsJson.toJSONString();

而且我希望搜索会话和电影没有重定向。 我正在尝试使用 jQuery 创建 Ajax

<body>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js" >
    $(document).ready(function () 
        $("#submitRequest").submit(function (e) 

            e.preventDefault();

            let url = $(this).attr('action');

            $.ajax(
                type: "GET",
                url: url,
                dataType: "json",
                data: filmName: $("#filmName").val(),
                success: function (data) 
                    display(data);
                
            );
        )
    )
</script>
<form action="/sessions/search">
    <input name="filmName" type="text" placeholder="Search...">
    <input type="submit" id="submitRequest">
</form>
<div>
    <p id="result"></p>
</div>
</body>

当我加载我的 html 页面并将“头像”(例如)放在搜索字段中时 - 我被重定向到 http://localhost:8080/sessions/search?filmName=Avatar 页面上带有 json-string

请帮忙。

【问题讨论】:

你不能将代码放在带有 src 属性的脚本标签中。 【参考方案1】:

首先,您不能使用相同的&lt;script&gt; 标签来导入jQuery 并放置您的自定义Javascript。

您必须使用两个单独的&lt;script&gt; 标签。

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js" ></script>

<script type="text/javascript"> // Here comes your custom JS code </script>

其次,您没有提交按钮。您必须为表单提交操作编写脚本。

$("#myForm").submit(function (e) 
        
    e.preventDefault();
    let url = $("#myForm").attr('action');

    $.ajax(
        method: "get",
        url: url,
        dataType: "json",
        data: filmName: $("#filmName").val(),
        success: function (data) 
            display(data);
        
    );
);

建议: 由于您正在触发 AJAX 调用而不是重新加载页面,因此您可以在表单中添加一个简单的按钮并将您的代码写入按钮单击功能,而不会冒在某些浏览器中重新加载的风险。

<button id="submitRequest">SUBMIT</button>

$("#submitRequest").click(function (e)  // Button click functions );

【讨论】:

非常感谢!现在 Ajax 可以工作了。但我无法显示响应。但这是进步)

以上是关于当我将 Ajax 与 spring 控制器一起使用时,它会被重定向 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

CharacterEncodingFilter 不能与 Spring Security 3.2.0 一起使用

Spring Boot 未使用 Spring Data 和 Hibernate 与 sql Server 一起运行

codeigniter 中的 Ajax 表单验证

当我将 IterativeImputer 与 KNeighborsClassifier 一起使用时出现错误“未知标签类型:'连续'”

当我将 [::-1] 与变量一起使用时会发生啥? [复制]

不能将 @Res() 与 FilesInterceptor() 一起使用