Недопустимый примитив JSON при использовании переменной - PullRequest
1 голос
/ 08 июля 2011

У меня есть код, который делает AJAX-вызов метода контроллера MVC, и он будет работать без помех, если я сделаю это:

var obj = '{"titlename":"whatever"}';
            $.ajax({
                type: "POST",
                url: "/Titles/Yo",
                contentType: "application/json; charset=utf-8",
                dataType: 'json',
                data: obj,
                success: function (result) {
                    $("#title_field").html(result.TitleName);
                }
            });

Но если я сделаю это:

var stringed="whatever"
            var obj = '{"titlename":stringed}';
            $.ajax({
                type: "POST",
                url: "/Titles/Yo",
                contentType: "application/json; charset=utf-8",
                dataType: 'json',
                data: obj,
                success: function (result) {
                    $("#title_field").html(result.TitleName);
                }
            });

Это приводит меня к ошибке "неверный примитив JSON".Я продолжаю пробовать различные перестановки одинарных и двойных кавычек, но все они продолжают давать мне одну и ту же ошибку.Как вставить строковую переменную в объект JSON?

Ответы [ 6 ]

2 голосов
/ 08 июля 2011

Попробуйте это:

var stringed = "whatever";
var obj = '{"titlename": "' + stringed + '"}';

Также вы можете взглянуть на библиотеку JSON2, которая может автоматически преобразовывать ваши данные в строку.

1 голос
/ 08 июля 2011

Вы должны сделать:

var stringed="whatever";
var obj_as_object = {titlename: stringed};
var obj_as_string = JSON.stringify(obj_as_object);

...
data: obj_as_string  //This goes in your ajax call

При этом мы автоматически кодируем объект с помощью JSON.

JSON.stringify будет работать в современных браузерах. Если вы хотите поддерживать более старый браузер (например, IE6), вы должны использовать библиотеку, такую ​​как json2 от http://json.org.

Надеюсь, это поможет. Приветствия

1 голос
/ 08 июля 2011
var obj = {"titlename":stringed};

Это, вероятно, то, что вам нужно.

1 голос
/ 08 июля 2011

Попробуйте это:

  var stringed="whatever";
   var obj = {"titlename": stringed};
    $.ajax({
        type: "POST",
        url: "/Titles/Yo",
        contentType: "application/json; charset=utf-8",
        dataType: 'json',
        data: obj,
        success: function (result) {
            $("#title_field").html(result.TitleName);
        }
    });

То, что у вас было, это просто строка, содержащая строку «строка», вам нужен литерал объекта.вместо этого я позабочусь об отправке строки json на сервер.

1 голос
/ 08 июля 2011

Почему вы объявляете свой объект строкой?

Вы пробовали делать:

var stringed="whatever";
var obj = {
   "titlename":stringed
 };
0 голосов
/ 08 июля 2011

Это не отличный способ сделать это, но ..

var stringed="whatever"
var obj = '{"titlename":'+stringed+'}';

или

var obj = {
  "titlename":stringed
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...