Недопустимый примитив JSON при отправке POST-запроса

У меня есть следующий запрос 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);
                    }
                });


            }

Основываясь на верхнем ответе в этом сообщении, я добавил кавычки вокруг "данных" атрибут, но я получаю сообщение об ошибке, говорящее о том, что "subscriptionJSON" не распознается. Я пробовал тестировать с образцом строки, как это сделано в сообщении: data: "{'foo':'foovalue', 'bar':'barvalue'}",, но когда контроллер получает параметр объекта subscribeJson, он равен нулю.

Каков официальный способ отправки объекта JSON через запрос POST на контроллер ASP .NET MVC?


person loremIpsum1771    schedule 19.09.2017    source источник


Ответы (2)


Ваша проблема в том, что вы не отправляете действительный JSON. Вам нужно заключить ключи в двойные кавычки. Кроме того, subscriptionJson — это буквальная строка в вашем коде. Вам нужно, чтобы это была строковая переменная.

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

Или, что еще лучше, просто предоставьте простой объект jQuery и позвольте ему закодировать значения для вас:

data: { subscriptions: subscriptionJson },
person Rory McCrossan    schedule 19.09.2017
comment
@SamAxe спасибо - ослепну. На самом деле я удалю этот ответ, так как вы все равно опередили меня. - person Rory McCrossan; 19.09.2017
comment
Не удаляйте его. я свой снял! :) - person Sam Axe; 19.09.2017
comment
@SamAxe, лол, я комментировал твое, когда ты его удалил. Мне удалось избавиться от ошибки Invalid JSON Primitive, но значение в контроллере отображается как нулевое. - person loremIpsum1771; 19.09.2017
comment
Нау. Мне нравится ваш комментарий о простом объекте с jQuery. Я никогда этого не знал. Спасибо за это. - person Sam Axe; 19.09.2017
comment
@loremIpsum1771: loremIpsum1771: не видя значения subscriptionJson и модели, в которую он пытается быть десериализован, я не уверен, что мы можем многое сделать, чтобы помочь вам больше. - person Sam Axe; 19.09.2017
comment
@SamAxe Да, я добавлю JSON в пост. - person loremIpsum1771; 19.09.2017
comment
@SamAxe На самом деле, я просто задам отдельный вопрос. - person loremIpsum1771; 19.09.2017
comment
@SamAxe Вот новый напишите, если вам интересно - person loremIpsum1771; 19.09.2017

создайте простой объект сценария Java непосредственно перед оператором Ajax. Создайте параметры ajax с данными как

data : { parameterName : jsobject }

Примечание: (без кавычек)

Убедитесь, что метод действия контроллера имеет такое же имя параметра.

person Dhanasekar    schedule 19.09.2017