【问题标题】:Invalid JSON primitive when sending POST request发送 POST 请求时 JSON 原语无效
【发布时间】:2017-09-19 18:40:47
【问题描述】:

我有以下 ajax 请求,我正在尝试将 JSON 对象发送到服务器:

function sendData(subscriptionJson) {




                $.ajax({
                    type: "POST",
                    url: '@Url.Action("SubscribeSecurities", "Subscription")',
                    data: "{'subscriptions': subscriptionJson}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (response) {
                        console.log("success response: " + response.responseText);
                        alert("Hello: " + response.Name + " .\nCurrent Date and Time: " + response.DateTime);

                    },
                    failure: function (response) {
                        console.log("failure response: " + response.responseText);
                        alert(response.responseText);
                    },
                    error: function (response) {
                        console.log("error response: " + response.responseText);
                        alert(response.responseText);
                    }
                });


            }

根据this post 中的最佳答案,我在“data”属性周围添加了引号,但我收到一条错误消息,指出“subscriptionJSON”未被识别。我尝试使用示例字符串进行测试,如帖子中所做的那样:数据:"{'foo':'foovalue', 'bar':'barvalue'}", 但是当控制器获取 subscriptionJson 对象的参数时,它为空。

通过 POST 请求将 JSON 对象发送到 ASP .NET MVC 控制器的官方方法是什么?

【问题讨论】:

    标签: jquery json ajax asp.net-mvc


    【解决方案1】:

    您的问题是因为您没有发送有效的 JSON。您需要用双引号将键括起来。此外,subscriptionJson 是代码中的文字字符串。你需要它是一个字符串变量。

    data: '{"subscriptions": ' + subscriptionJson + '}',
    

    或者,更好的是,只需向 jQuery 提供一个普通对象并让它为您编码值:

    data: { subscriptions: subscriptionJson },
    

    【讨论】:

    • @SamAxe 谢谢 - 快失明了。事实上,当你击败我时,我会删除这个答案
    • 不要删除它。我删除了我的! :)
    • @SamAxe 哈哈,当你删除它时,我正在评论你的。我能够让错误“无效 JSON 基元”消失,但该值在控制器中以 null 的形式出现
    • 不。我喜欢你对 jQuery 的普通对象的评论。我从来不知道。谢谢你。
    • @loremIpsum1771:没有看到 subscriptionJson 的值以及它试图反序列化的模型,我不确定我们可以做些什么来帮助你。
    【解决方案2】:

    在 Ajax 语句之前创建一个简单的 java 脚本对象。使用数据构建 ajax 选项

    data : { parameterName : jsobject }
    

    注意:(无引号)

    确保控制器动作方法具有相同的参数名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      • 2019-01-31
      • 1970-01-01
      • 2012-12-04
      • 2014-06-25
      相关资源
      最近更新 更多