English 中文(简体)
如何在 JSON 字符串中通过“这个”, 然后需要转换为 JSOBJ
原标题:How to pass "this" in a JSON string which then needs to be converted to an JS Obj

我正在建立一个小型的联署材料方法,将 data-/code> attrs附在链接上,将事件绑在链接上,并将 data-/code> 值发送给第三党JS Anallytics API。

<a href="#" class="js-analytics-proxy" data-trackme= {"obj": this, "rmethod": "track", "partial-path": "/foo/bar" } 

在一份联署材料中

$( js-analytics-proxy ).live( click , function() { 
    3rdParty.webTrack( site1 ,  foo , $(this).data( trackme ));
});

问题是:

  1. By default, $(this).data( trackme ) will return a String
  2. If I $.parseJSON(..) it, it will fail because "obj": this is not a valid key/val pair in JSON string notation.
  3. No matter what, when passed "thought" the data-* attr, only the String representation of of the JS obj name is passed.

我确实意识到 data- {{{{{{{{{{{{{}}}}是用于“data> 和可论证 this <{}{{}}}不是数据,而是代码,所以它并不属于它。此外,我想避免“硬码” obj:这对键/val配对进入我的JS类(基本上把它从数据-* attr中取出来,如果可能的话,把它添加到JS方法的参数中。


最新消息1:我之所以使用这个是因为第三党联署材料图书馆预期会使用这个网站。

onclick= 3rdParty.webTrack("site1", "foo", {"obj": this, "rmethod": "track", "partial-path": "/foo/bar" }  

all over the marcup. 我们正在研究一种不那么侵扰性的方法。 有时还有其他的钥匙/瓦尔配对也通过联署材料的其他对象。 obj: 这是用来说明问题的一个孤立的例子 。


更新 2: 这似乎很危险, 但我可以创建一个公约, 将属性以“ js: ” 前缀为“ js: ” 的字符串值 evval d. 将转换为“ code ” “obj ” : this... 当然, 这伴随着使用 eval 的所有危险, 这是我想不惜一切代价避免的。

我还可以简单地将“此”的任何字符串值修改为当前范围 < code> this , 其危险程度较低, 但海事组织不太优雅。

问题回答

简单删除 "obj" : this , 它不是json, 也不会工作 。

在此之后,它将成为合法的json,以下工作将奏效,因为第三方.webTrack 实际上预计会有一个DOM元素:

$( js-analytics-proxy ).live( click , function() {
    var data = $.parseJSON( $(this).data( "trackme" ) );
    data.obj = this;
    ThirdParty.webTrack( site1 ,  foo , data);
});

当您将单击绑绑到事件时,您可以抓取 this 的引用,并将其添加到您试图通过的对象上,也许可以使用像这样的东西:

$( js-analytics-proxy ).live( click , function() { 
    3rdParty.webTrack( site1 ,  foo , $.extend(
        $.parseJSON($(this).data( trackme )), 
        {  obj  : this }
    );
});

显然,您还会从 a 元素的 a 属性中移除 " obj " : 部分。





相关问题
CSS working only in Firefox

I am trying to create a search text-field like on the Apple website. The HTML looks like this: <div class="frm-search"> <div> <input class="btn" type="image" src="http://www....

image changed but appears the same in browser

I m writing a php script to crop an image. The script overwrites the old image with the new one, but when I reload the page (which is supposed to pickup the new image) I still see the old one. ...

Firefox background image horizontal centering oddity

I am building some basic HTML code for a CMS. One of the page-related options in the CMS is "background image" and "stretch page width / height to background image width / height." so that with large ...

Separator line in ASP.NET

I d like to add a simple separator line in an aspx web form. Does anyone know how? It sounds easy enough, but still I can t manage to find how to do it.. 10x!