【问题标题】:Jquery GET request not being recieved by controller控制器未接收到 Jquery GET 请求
【发布时间】:2019-10-20 23:18:24
【问题描述】:

我试图让网页的一部分每隔一段时间刷新一次。 我将 spring boot 与 thymeleaf 一起用于我的 Web 应用程序。 我决定使用 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";
    }
}

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

【问题讨论】:

  • 将 url 更改为 /refresh 并删除 http://localhost:8080 部分。
  • 我刚试过这个,但是 get 仍然没有被执行。奇怪的是,它似乎根本没有执行,甚至没有给出失败信息。
  • 尝试调试,看看它是否击中您的控制器。也从"index.html :: #navbar"中删除#

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


【解决方案1】:

这可能是您的 $.ajax 函数的问题。

看看它应该是怎样的(GET):

$.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 请求传递数据。


希望这会有所帮助!

婆罗门

【讨论】:

    【解决方案2】:

    您可能已经自己找到了答案,但是您需要添加函数调用,例如,将其添加到 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();
    };
    

    【讨论】:

      猜你喜欢
      • 2018-02-28
      • 1970-01-01
      • 2020-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多