Razor Pages ajax 发布错误“SyntaxError: Unexpected token < in JSON at position 0”

问题描述

我正在构建一个 AspNet Core Razor Pages 网站,但无法对服务器执行 JQuery AJAX POST 调用。 这里是服务器端代码

public async Task<JsonResult> OnPostUpdateQRCodeAsync(int id,string name,string description)
    {
        ...
    }

这里是我的 ajax 客户端代码

function UpdateQRCodeData(id,name,description) {
  var url = "?handler=UpdateQRCode";
  var token = getToken();
  debugger
  return $.ajax({
        type: "POST",url: baseUrl + url,headers: { "RequestVerificationToken": token },data: {
            id: id,name: name,description: description
        },contentType: "application/json;",dataType: "json",success: function (response) {
      },error: function (XMLHttpRequest,textStatus,errorThrown) {
        alert(errorThrown);
      }
  });
}

getToken() 函数页面获取 Antiforgery 令牌。

我收到的错误如下:

SyntaxError: Unexpected token < in JSON at position 0

我做错了什么?有人可以帮我吗?

谢谢

解决方法

这是一个工作演示:

cshtml(当使用@Html.AntiForgeryToken()时,html会有一个隐藏的输入__RequestVerificationToken):

@Html.AntiForgeryToken()
<button onclick="UpdateQRCodeData(1,'name','description')">Ajax</button>

js(处理程序 OnPostUpdateQRCodeAsync 的参数不是从正文中获取的,所以我删除了 contentType: "application/json;",):

<script>
    function UpdateQRCodeData(id,name,description) {
        var url = "?handler=UpdateQRCode";
        return $.ajax({
            type: "POST",url: url,headers: { "RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val() },data: {
                id: id,name: name,description: description
            },//contentType: "application/json;",dataType: "json",success: function (response) {
            },error: function (XMLHttpRequest,textStatus,errorThrown) {
                alert(errorThrown);
            }
        });
    }
</script>

cshtml.cs:

public async Task<JsonResult> OnPostUpdateQRCodeAsync(int id,string name,string description)
        {
            return new JsonResult(new object { });
        }

结果: enter image description here