Преобразование строки JavaScript в код без использования eval - PullRequest
0 голосов
/ 12 сентября 2011

Я пытаюсь сделать следующее без использования eval (), так как многие посты говорят, что это медленно и плохо, поэтому вы не должны использовать его, так как всегда есть альтернативные способы.

JS (заметьте, я использую jquery)

$('a').click(function() {

//Assign myVar to the id value of the a tag 
var myVar = $(this).attr('id');


$.getJSON("assets/js/json.js", function(json) {
    alert("json."+myVar+".thumb");
    }); 

});

И у меня есть некоторые базовые HTML, который передает значение для myVar

<a id="imageID1" href="#">A link 1</a><br />
<a id="imageID2" href="#">A link 2</a>

Базовый файл JSON

   {
"imageID1" : {
    "thumb" : "assets/images/312px.png",
    "zoomThumb" : "assets/images/gallery/_AR_0063_m_thumb.jpg",
    "large" : "assets/images/gallery/_AR_0063.jpg"
},

 "imageID2" : {
    "thumb" : "another.png",
    "zoomThumb" : "assets/images/gallery/_anotherb.jpg",
    "large" : "assets/images/gallery/another.jpg"
}

  }

Таким образом, идентификатор для каждой ссылки передается в myVar по клику, это работает нормально, но значение предупреждения неверно.

Например, если щелкнуть по imageID2, на самом деле в предупреждении должно отображаться «another.png», но вместо этого отображается код, который я на самом деле хочу запустить, «json.imageID @ .thumb».

Теперь я могу изменить строку предупреждения на

   alert(eval("json."+myVar+".thumb"));

Что делает трюк, но, как уже упоминалось, не хочет использовать eval из-за известных проблем.

Так что любой альтернативный способ сделать выше. Заранее благодарим за любую помощь или советы.

Ben

Ответы [ 2 ]

4 голосов
/ 12 сентября 2011

Вы пытаетесь написать

alert(json[myVar].thumb);

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

1 голос
/ 12 сентября 2011

Это должно работать, я считаю: alert(json[myVar].thumb);

...