将点击信息转换为 JSON
Convert click info to JSON
我正在尝试使用
将点击信息转换为 JSON 进行存储
$(document).click(function(e){
url = '/recordclick';
$.post(url, {'clickData':JSON.stringify(e)});
});
但是点击事件似乎有一个或多个循环引用,因为我得到了错误
Uncaught TypeError: Converting circular structure to JSON
有没有一种方法可以轻松地将点击事件转换成没有循环引用的东西,即无需手动删除每个循环引用属性?
stringify 函数接受一个过滤函数作为第二个参数,所以我认为你可以这样做。
JSON.stringify( event, function( key, value) {
if( key == 'circularReference1' || key == 'circularReference2') { return value.id;}
else {return value;}
}
您可以使用 Douglas Crockford 的 JSON.decycle
函数在将事件对象编码为 JSON 之前制作事件对象的深拷贝。
源代码在这里:https://github.com/douglascrockford/JSON-js/blob/master/cycle.js
这里引用了函数描述的源代码
Make a deep copy of an object or array, assuring that there is at most one instance of each object or array in the resulting structure. The duplicate references (which might be forming cycles) are replaced with an object of the form {"$ref": PATH}
where the PATH
is a JSONPath string that locates the first occurance. [...]
因为你已经包含 JSON.decycle
你的代码可以这样调整:
$(document).click(function(e) {
var url = '/recordclick', // let's declare variables as local!
dec = JSON.decycle(e);
$.post(url, { 'clickData': JSON.stringify(dec) });
});
我正在尝试使用
将点击信息转换为 JSON 进行存储$(document).click(function(e){
url = '/recordclick';
$.post(url, {'clickData':JSON.stringify(e)});
});
但是点击事件似乎有一个或多个循环引用,因为我得到了错误
Uncaught TypeError: Converting circular structure to JSON
有没有一种方法可以轻松地将点击事件转换成没有循环引用的东西,即无需手动删除每个循环引用属性?
stringify 函数接受一个过滤函数作为第二个参数,所以我认为你可以这样做。
JSON.stringify( event, function( key, value) {
if( key == 'circularReference1' || key == 'circularReference2') { return value.id;}
else {return value;}
}
您可以使用 Douglas Crockford 的 JSON.decycle
函数在将事件对象编码为 JSON 之前制作事件对象的深拷贝。
源代码在这里:https://github.com/douglascrockford/JSON-js/blob/master/cycle.js
这里引用了函数描述的源代码
Make a deep copy of an object or array, assuring that there is at most one instance of each object or array in the resulting structure. The duplicate references (which might be forming cycles) are replaced with an object of the form
{"$ref": PATH}
where thePATH
is a JSONPath string that locates the first occurance. [...]
因为你已经包含 JSON.decycle
你的代码可以这样调整:
$(document).click(function(e) {
var url = '/recordclick', // let's declare variables as local!
dec = JSON.decycle(e);
$.post(url, { 'clickData': JSON.stringify(dec) });
});