2015-06-11 2 views
4

Я динамически создает строку, используя JavaScript, вот код ниже:Назначение объекта JSON в поле данных

var row2 = "<tr><td><a href='#editModal' class='modal_trigger' data-info="+name+" data-toggle='modal'>Edit</a></td></tr>"; 

Значение переменной здесь является объект JSON. Это позже передается модально, когда пользователь нажимает на него, и значения могут быть получены. Однако просто объявив var, как я сделал выше наборы data-info=[Object object].

Содержание переменной JSON является:

Object 
    name: "Test 8" 
    created_at: "2015-06-10 16:54:45" 
    id: 128 
    updated_at: "2015-06-10 16:54:45" 
    __proto__: Object 

Есть ли способ вокруг него?

+0

использовать JSON.strigify – kornieff

+0

@kornieff, просто попробовал: это приводит к 'data-info =" {"" id ": =" "6, =" "...}' – Namit

+0

что такое содержимое переменную 'name'? по-видимому, это больше, чем просто имя. Добавьте 'console.log (имя)' прямо перед вашей строкой кода и сообщите нам, что напечатано на консоли. – LeGEC

ответ

1

Некоторые советы здесь:

  • Не используйте var в качестве имени переменной, даже в примерах (реальный код не будет даже скомпилировать)
  • Пожалуйста, убедитесь, что вы понимаете, что JSON является, потому что Javascript object! = JSON. Очевидно, var является объектом JS в этом случае.

сказал, что вы можете преобразовать любой объект JS, который не содержит функции в строку JSON с JSON.stringify(variable):

UPDATE: Это то, что я имею в виду:

var row2 = '<tr><td><a href="#editModal" class="modal_trigger" data-info="'+ 
     name+'" data-toggle="modal">Edit</a></td></tr>'; 

(Обратите внимание на изменения используя кавычки)

+0

В качестве примера здесь использовался только «var». Кроме того, я попробовал 'JSON.stringify', результат:' data-info = "{" id ": 7," author_name ":" Test "" User "...}' – Namit

+0

Это JSON !. Теперь вы может создать объект JS, просто делая противоположный шаг: 'JSON.parse (myJsonString)' –

+0

Parse не принимает 'Object'. – Namit

0

, пожалуйста, используйте JSON.stringify(yourVar).

var row2 = "<tr><td><a href='#editModal' class='modal_trigger' data-info="+JSON.stringify(yourVar)+" data-toggle='modal'>Edit</a></td></tr>"; 
1

Если вы получаете [object Object] то это не JSON, является объектом.
JSONстрока, содержащая объект, сериализованный, и используется в качестве облегченного формата обмена данными.

Try сериализация объекта JSON

"...data-info=" + JSON.stringify(myVar||null) + " data..." 

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

+0

, вероятно, лучше использовать 'JSON.stringify (myVar || {})' – royhowie

+0

Я использовал 'null', потому что если myVar является 'undefined' или не содержит данных, когда [JSON] (http://json.org/) анализируется на Object, он должен отражать ** пустые данные **, а объект' {} 'оценивается как 'true', когда ** принудительно **, напротив,' null' не представляет никаких данных. – jherax

+0

считать: 'if ({}) // -> true', вместо этого:' if (null) // -> false' – jherax

0

Храните name переменные в некотором отображении или массив, сохранить идентификатор или индекс в вашей строке, и использовать это, чтобы забрать его позже:

// using a mapping : 
var infoMapping = {}; 

function createRow (name) { 
    // this will work if 'id' is a key which identifies the object 
    infoMapping[name.id] = name; 
    var row2 = "<tr><td><a href='#editModal' ... data-infoid="+name.id+" ... "; 
    // etc ... 
} 

function editModal (nRow) { 
    var infoid = $(nRow).attr('data-infoid'); 
    var name = infoMapping[infoid]; 

    // use name ... 
} 
+0

Не могли бы вы немного подробнее остановиться здесь. – Namit

+0

@Namit: вы указываете на какой-то модальный вопрос, как вы используете 'data-info' в своем модальном? – LeGEC

+0

Как только модальная функция открыта, я пытаюсь получить доступ к объекту, хранящемуся в 'data-info'. – Namit

0
var x = {a:10, b:20}; 
var html = "<div data-info='" + JSON.stringify(x) + "'></div>"; 

Результат

"<div data-info='{"a":10,"b":20}'></div>"