2013-12-16 23 views
1

我正在使用jquery插件jqZoom来渲染图像库。如果图像的名称为guid,jqZoom不起作用

jqZoom Project Page

文档说像这样创建缩略图:

<a class="zoomThumbActive" href="javascript:void(0);" rel="{gallery: 'gal1', smallimage: './imgProd/SMALLIMAGE1.jpg',largeimage: './imgProd/LARGEIMAGE1.jpg'}"> 
    <img src="imgProd/thumbs/THUMBIMG1.jpg"> 
</a> 

如果使用“普通”的名字为每例子工程。但我的图像具有的GUID的名称和插件失败:

Uncaught SyntaxError: Unexpected token ILLEGAL jquery.jqzoom-core.js:240 $.extend.swapimage jquery.jqzoom-core.js:240 (anonymous function) jquery.jqzoom-core.js:191 x.event.dispatch jquery.1.10.2.min.js:5 v.handle

使用Chrome浏览器开发工具失败functon是如下:

swapimage: function (link) { 
        el.largeimageloading = false; 
        el.largeimageloaded = false; 
        var options = new Object(); 

        //alert(eval("(" + $.trim($(link).attr('rel')) + ")")); 

        console.log($.trim($(link).attr('rel'))); 
options = $.extend({}, eval("(" + $.trim($(link).attr('rel')) + ")")); 
        alert($.trim($(link).attr('rel'))); 

        if (options.smallimage && options.largeimage) { 
         var smallimage = options.smallimage; 
         var largeimage = options.largeimage; 
         $(link).addClass('zoomThumbActive'); 
         $(el).attr('href', largeimage); 
         img.attr('src', smallimage); 
         lens.hide(); 
         stage.hide(); 
         obj.load(); 
        } else { 
         alert('ERROR :: Missing parameter for largeimage or smallimage.'); 
         throw 'ERROR :: Missing parameter for largeimage or smallimage.'; 
        } 
        return false; 
       } 
      }); 

,并在此行特别失败:

options = $.extend({}, eval("(" + $.trim($(link).attr('rel')) + ")")); 

环顾网络看起来这样的错误是eval创建无效javascript对象的结果,所以显然我们必须将输出重新格式化为Json字符串,以便它正确解释为p参数

但我似乎无法“强制”它将此解释为正确的jSON。如果我取代以上

options = $.extend({}, JSON.parse($.trim($(link).attr('rel')))) 

我得到的线:

Uncaught SyntaxError: Unexpected token g ef01e51a-d5c5-49ea-bd21-9c4e7f9acbb6:1 {gallery: 'gal1', smallimage: '\xc_small\58f54dc5-b412-4ffd-af51-5bc6863b280d.jpg',largeimage: '\xc_full\58f54dc5-b412-4ffd-af51-5bc6863b280d.jpg'}

那么,如何做到这一点?

+0

_坚持旧版本只是为了避免写出稍微更明确的代码是全能的可怕advice_ - 这是一个建议,而不是一个建议,随着JSON强制执行(它也适用于单引号也是BTW) – davidkonrad

回答

2

您的反斜杠被解释为转义字符。使用正斜杠。例如,rel属性可以读取:

rel='{"gallery": "gal1", "smallimage": "/xc_small/58f54dc5-b412-4ffd-af51-5bc6863b280d.jpg", "largeimage": "/xc_full/58f54dc5-b412-4ffd-af51-5bc6863b280d.jpg"}' 

请注意,我的双引号键,并在JSON字符串值,并用单引号的rel属性。字符串必须在JSON中用双引号引起来,而且键是字符串。

+0

“请注意,我已经在JSON中对键和字符串值进行了双引号引用,并且对rel属性使用了单引号“ - 这可能是导致”意外令牌g“的实际问题”。如在'gallery'中的'g'。 – millimoose

+0

对不起,你是毫毛 – jonahb

+0

WGAF。这没什么大不了的,对此的低估是极端的。对不起,我浪费了我的时间。 – davidkonrad