控制器未接收到jQuery GET请求

时间:2019-06-05 12:35:24

标签: jquery ajax spring model-view-controller thymeleaf

我正在尝试使网页的一部分每隔一段时间刷新一次。 我在Web应用程序中将Spring Boot与thymeleaf结合使用。 我决定使用一个jquery get请求来联系我的mvc控制器,但是该get请求似乎没有被控制器处理。

我已经尝试过在加载时调用该函数,但这没有任何结果。

这是Ajax函数:

    function setupRefresh() {
        setInterval(refreshFrame(), 1000);
    }
    function refreshFrame() {
        $.ajax({type: "GET",
        url: "http://localhost:8080/refresh"
    }).done(function (fragment) {
        $("#navbar").replaceWith(fragment);
    }).fail(function (jqXHR, textStatus, errorThrown) {
        alert("AJAX call failed: " + textStatus + ", " + errorThrown);
    });
    }

这是我要刷新的div:

<nav id="navbar" class="navbar" th:fragment="navbar">
    <input type="text" name="search" placeholder="Search..">
    <div class="mx-auto order-0">
        <a class="navbar-brand" href="/index">Boxed</a>
    </div>
    <div>Generate Days:</div>
    <a th:text="${currentDay}" th:href="@{/toggleGeneration}" onclick="setupRefresh()"></a>
</nav>

这是我的控制人

@Controller
public class DataController {

    @Autowired
    private DayService dayService;

    @GetMapping(value = "/refresh")
    public String refreshNumber(Model model){
        model.addAttribute("currentDay", dayService.findHighest().getDayNr());
        return "index.html :: #navbar";
    }
}

似乎甚至没有执行get请求,因为我什至没有在页面上收到错误警报。在get请求之外编写的所有内容均已执行,但是请求本身却没有给我任何好处。

2 个答案:

答案 0 :(得分:0)

这可能与您的$.ajax函数有关。

看看它应该如何(获取):

$.ajax({
  url: url,
  data: data,
  success: success,
  dataType: dataType
});

POST

$.ajax({
  type: "POST",
  url: url,
  data: data,
  success: success,
  dataType: dataType
});


什么是GET和POST?

GET 作为URL参数传递数据,因此您可以查看和修改它。 GET比POST更快。

POST 是一种最安全的方法,因为它通过HTTP请求传递数据。


希望这会有所帮助!

布拉卡(Brhaka)

答案 1 :(得分:0)

您可能已经找到了答案,但是您需要添加函数调用,例如,将其添加到onload中(尝试这样做)。然后从ajax url参数中删除“ http://localhost:8080/”,至少对我而言,它始终在不使用斜杠的情况下工作。我不确定从控制器返回数据的方式,因为我是用另一种方式来做的。

function myFunction() {
  setInterval(ajaxFunc, 1000);
}

function ajaxFunc() {
    $.ajax({
        type: "GET",
        url: "refresh"
    }).done(function (fragment) {
        $("#navbar").replaceWith(fragment);
    }).fail(function (jqXHR, textStatus, errorThrown) {
        alert("AJAX call failed");
    });
}

window.onload = function() {
    myFunction();
};