【问题标题】:How can I send JSON data to ASP Server using AJAX?如何使用 AJAX 将 JSON 数据发送到 ASP 服务器?
【发布时间】:2021-03-22 11:15:25
【问题描述】:

我有一个使用 ASP.NET 的网站,需要从 CloudKit 检索一些数据。我正在使用 CloudKit JS,我正在从 CloudKit 检索记录并使用 C# 从我的 JavaScript 将数据发送到服务器。我可以使用JSON.stringify(record); 将检索到的记录的 JSON 对象转换为字符串,但我无法使用 AJAX 将其发送到服务器。这是我使用 AJAX 发送数据的代码:

function afterRecordLoaded(record) {
            var decodedRecord = JSON.stringify(record);
            var xmlhttp = new XMLHttpRequest();
            xmlhttp.open("POST", "/receive?type=specific&" + "data=" + decodedRecord, true);
            xmlhttp.setRequestHeader("Content-Type", "application/json");
            xmlhttp.send();
}
afterRecordLoaded(record);

当我在浏览器开发工具中转到控制台时,手动完成时我可以正确执行请求,但是当 AJAX 执行此操作时,它会收到 HTTP 错误 400。换句话说,我可以在键入时执行请求将 URL(具有正确参数)添加到地址栏中,但是当 AJAX 使用相同的 URL(具有相同参数)时,它不起作用并返回 HTTP 错误 400。

这是接收请求的页面的 C# 代码:

    var token = antiforgery.GetAndStoreTokens(HttpContext).RequestToken;

    var type = Request.Query["type"];
    var data = Request.Query["data"];

    if (type == "specific")
    {
        if (data != "")
        {
            PostProcessor.processPostData(data);
        }
        else
        {
            Response.StatusCode = 400;
        }
    }

在进行简单的 Google 搜索时,我可以看到其他人也遇到了这个问题,为了解决这个问题,他们使用了防伪令牌。如果需要,我不确定如何实施防伪令牌。如果有人有解决方案来摆脱 HTTP 错误 400,或者实施防伪令牌以使错误消失,那就太好了。对不起,如果这个问题到处都是,或者非常明显,因为我是 ASP 的初学者。谢谢。

【问题讨论】:

    标签: javascript c# asp.net json ajax


    【解决方案1】:

    可能是当你在控制台发送时,数据不为空。当代码中的 XHR 数据为空时,请求然后输入 asp.net 的 else 表达式 Response.StatusCode = 400;

    我猜你的代码JSON.stringify(record) 可能有一些错误,什么都不返回。

    此外,当您使用发布请求时,数据(真正的有效负载)不应像您的样式一样作为查询参数发送,它应该像这样在有效负载中。

    var decodedRecord = JSON.stringify(record);
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("POST", "/receive?type=specific", true);
    xmlhttp.setRequestHeader("Content-Type", "application/json");
    xmlhttp.send(decodedRecord );
    

    【讨论】:

    • 数据变量不为空。当我手动访问该 URL 时,我能够得到我需要的东西。当它由 AJAX 完成时,我无法做到。
    • 当你手动做的时候,我想你还是在控制台中使用xmlhttprequest,或者你找不到问题。只需将上面的代码粘贴到控制台中,(首先在控制台中添加记录数据)看看会发生什么
    【解决方案2】:

    解决方案非常简单。我使用的是 GET 请求的格式,而不是 POST 请求。我所要做的就是将xmlhttp.open("POST", "/receive?type=specific&" + "data=" + decodedRecord, true); 更改为xmlhttp.open("GET", "/receive?type=specific&" + "data=" + decodedRecord, true);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多