发送POST请求时无效的JSON原语

时间:2017-09-19 18:40:47

标签: jquery json ajax asp.net-mvc

我有以下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中的最佳答案,我在"数据"周围添加了引号。属性,但我收到一条错误,说明" subscriptionJSON"没有得到承认。我尝试使用示例字符串进行测试,如post:data:"{'foo':'foovalue', 'bar':'barvalue'}",,但是当控制器获取subscriptionJson对象的参数时,它为null。

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

2 个答案:

答案 0 :(得分:3)

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

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

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

data: { subscriptions: subscriptionJson },

答案 1 :(得分:0)

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

构建ajax选项
data : { parameterName : jsobject }

注意:(没有引号)

确保控制器操作方法具有相同的parameterName。