JSON辅助格式化处理方法


Posted in Javascript onMarch 26, 2013

平时服务器端开发人员写好后台之后一般写一份简单的接口说明页面,类似:

<form action="test.php" accept-charset="utf-8"> 
<div><label for="">param_1</label><input type="text" name="param_1" value="value_1"/></div> 
<div><label for="">param_2</label><input type="text" name="param_2" value="value_2"/></div> 
<div><label for="">param_3</label><input type="text" name="param_3" value="value_3"/></div> 
<div><label for="">param_4</label><input type="text" name="param_4" value="value_4"/></div> 
<div><input type="submit" value="submit"/></div> 
</form>

由于结果是以json形式返回的,不容易一眼辨认,所以为了方便,对结果进行了简单的处理:
1,由于不能控制返回结果的页面,所以直接对请求进行了拦截并用ajax方式进行重发。
2,格式化返回的json结果,非json结果直接显示。
注:ubuntu下的chromium在处理overflow的问题上貌似有点不一样,所以结果容器写得有点罗嗦。
具体例子:
<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8"/> 
</head> 
<body> 
<div id="page"> 
<form action="test.php" accept-charset="utf-8"> 
<div><label for="">param_1</label><input type="text" name="param_1" value="value_1"/></div> 
<div><label for="">param_2</label><input type="text" name="param_2" value="value_2"/></div> 
<div><label for="">param_3</label><input type="text" name="param_3" value="value_3"/></div> 
<div><label for="">param_4</label><input type="text" name="param_4" value="value_4"/></div> 
<div><input type="submit" value="submit"/></div> 
</form> 
</div> 
<script type="text/javascript" src="../js/jQuery.js"></script> 
<script type="text/javascript" src="../js/JSONFormat.js"></script> 
</body> 
</html>

结果:
JSON辅助格式化处理方法
JSONFormat.js内容:
View Code 
var JSONFormat = (function(){ 
var _toString = Object.prototype.toString; 
function format(object, indent_count){ 
var html_fragment = ''; 
switch(_typeof(object)){ 
case 'Null' :0 
html_fragment = _format_null(object); 
break; 
case 'Boolean' : 
html_fragment = _format_boolean(object); 
break; 
case 'Number' : 
html_fragment = _format_number(object); 
break; 
case 'String' : 
html_fragment = _format_string(object); 
break; 
case 'Array' : 
html_fragment = _format_array(object, indent_count); 
break; 
case 'Object' : 
html_fragment = _format_object(object, indent_count); 
break; 
} 
return html_fragment; 
}; 
function _format_null(object){ 
return '<span class="json_null">null</span>'; 
} 
function _format_boolean(object){ 
return '<span class="json_boolean">' + object + '</span>'; 
} 
function _format_number(object){ 
return '<span class="json_number">' + object + '</span>'; 
} 
function _format_string(object){ 
if(0 <= object.search(/^http/)){ 
object = '<a href="' + object + '" target="_blank" class="json_link">' + object + '</a>' 
} 
return '<span class="json_string">"' + object + '"</span>'; 
} 
function _format_array(object, indent_count){ 
var tmp_array = []; 
for(var i = 0, size = object.length; i < size; ++i){ 
tmp_array.push(indent_tab(indent_count) + format(object[i], indent_count + 1)); 
} 
return '[\n' 
+ tmp_array.join(',\n') 
+ '\n' + indent_tab(indent_count - 1) + ']'; 
} 
function _format_object(object, indent_count){ 
var tmp_array = []; 
for(var key in object){ 
tmp_array.push( indent_tab(indent_count) + '<span class="json_key">"' + key + '"</span>:' + format(object[key], indent_count + 1)); 
} 
return '{\n' 
+ tmp_array.join(',\n') 
+ '\n' + indent_tab(indent_count - 1) + '}'; 
} 
function indent_tab(indent_count){ 
return (new Array(indent_count + 1)).join(' '); 
} 
function _typeof(object){ 
var tf = typeof object, 
ts = _toString.call(object); 
return null === object ? 'Null' : 
'undefined' == tf ? 'Undefined' : 
'boolean' == tf ? 'Boolean' : 
'number' == tf ? 'Number' : 
'string' == tf ? 'String' : 
'[object Function]' == ts ? 'Function' : 
'[object Array]' == ts ? 'Array' : 
'[object Date]' == ts ? 'Date' : 'Object'; 
}; 
function loadCssString(){ 
var style = document.createElement('style'); 
style.type = 'text/css'; 
var code = Array.prototype.slice.apply(arguments).join(''); 
try{ 
style.appendChild(document.createTextNode(code)); 
}catch(ex){ 
style.styleSheet.cssText = code; 
} 
document.getElementsByTagName('head')[0].appendChild(style); 
} 
loadCssString( 
'.json_key{ color: purple;}', 
'.json_null{color: red;}', 
'.json_string{ color: #077;}', 
'.json_link{ color: #717171;}', 
'.json_array_brackets{}'); 
var _JSONFormat = function(origin_data){ 
this.data = 'string' != typeof origin_data ? origin_data : 
JSON && JSON.parse ? JSON.parse(origin_data) : eval('(' + origin_data + ')'); 
}; 
_JSONFormat.prototype = { 
constructor : JSONFormat, 
toString : function(){ 
return format(this.data, 1); 
} 
} 
return _JSONFormat; 
})(); 
function create_result_contatiner(){ 
var $result = $('<pre id="result" style=" width: 100%; height: 100%; overflow: scroll; overflow-x: scroll; overflow-y:scroll"></pre>') 
var $result_container = $('<div id="result_container" style="position: fixed; top: 1%; right: 8px; width: 5%; height: 97%; margin: 0; padding: 0; border:1px solid skyblue; background: #f8f8f8; line-height: 1.2em; font-size: 14px; cursor: pointer;"></div>'); 
$result_container.append($result); 
$result_container.hover(function(){ 
$(this).stop(true).animate({width:'50%'}, 'slow'); 
}, function(){ 
$(this).stop(true).animate({width:'5%'}, 'slow'); 
}); 
$('body').append($result_container); 
return [$result_container, $result]; 
} 
(function request_intercept(args){ 
var $result_container = args[0], 
$result = args[1]; 
$('form *[type="submit"]').bind('click', function(){ 
var _form = $(this).parents('form'), 
_action = (_form.attr('action') || './'), 
_method = (_form.attr('method') || 'get').toLowerCase(), 
_params = {}; 
_form.find('input[type="text"]').each(function(){ 
var item = $(this); 
_params[item.attr('name')] = item.val(); 
}); 
$['get' == _method ? 'get' : 'post'](_action, _params, function(response){ 
try{ 
var j = new JSONFormat(JSON && JSON.parse ? JSON.parse(response) : eval('(' + response + ')')); 
$result.html(j.toString()); 
}catch (e){ 
$result.html($result.text(response).html()); 
} 
$result_container.stop(true).animate({width:'50%'}, 'slow'); 
}); 
return false; 
}); 
})(create_result_contatiner());
Javascript 相关文章推荐
细说浏览器特性检测(2)-通用事件检测
Nov 05 Javascript
jquery中eq和get的区别与使用方法
Apr 14 Javascript
javascript中checkbox使用方法实例演示
Nov 19 Javascript
理解JavaScript中Promise的使用
Jan 18 Javascript
深入浅析JavaScript中with语句的理解
May 12 Javascript
根据输入邮箱号跳转到相应登录地址的解决方法
Dec 13 Javascript
详解JS对象封装的常用方式
Dec 30 Javascript
javascript实现页面滚屏效果
Jan 17 Javascript
easyui-datagrid开发实践(总结)
Aug 02 Javascript
bootstrap select下拉搜索插件使用方法详解
Nov 23 Javascript
细说webpack源码之compile流程-入口函数run
Dec 26 Javascript
微信小程序实现MUI数字输入框效果
Jan 31 Javascript
html+css+js实现xp window界面及有关功能
Mar 26 #Javascript
jquery图片放大镜功能的实例代码
Mar 26 #Javascript
EditPlus注册码生成器(js代码实现)
Mar 25 #Javascript
本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
Mar 25 #Javascript
JS上传前预览图片实例
Mar 25 #Javascript
js实现杯子倒水问题自动求解程序
Mar 25 #Javascript
js实现上传图片之上传前预览图片
Mar 25 #Javascript
You might like
需要发散思维学习PHP
2009/06/29 PHP
dedecms系统的广告设置代码 基础版本
2010/04/09 PHP
配置eAccelerator和XCache扩展来加速PHP程序的执行
2015/12/22 PHP
PHP Ajax JavaScript Json获取天气信息实现代码
2016/08/17 PHP
swoole_process实现进程池的方法示例
2018/10/29 PHP
jQuery select的操作实现代码
2009/05/06 Javascript
jquery tools之tooltip
2009/07/25 Javascript
浅谈javascript的原型继承
2012/07/25 Javascript
jQuery用unbind方法去掉hover事件及其他方法介绍
2013/03/18 Javascript
js禁止document element对象选中文本实现代码
2013/03/21 Javascript
js获取IP地址的方法小结
2014/07/01 Javascript
JS获取及设置TextArea或input文本框选择文本位置的方法
2015/03/24 Javascript
使用bootstrap validator的remote验证代码经验分享(推荐)
2016/09/21 Javascript
微信小程序slider组件使用详解
2018/01/31 Javascript
Vue2.0结合webuploader实现文件分片上传功能
2018/03/09 Javascript
微信小程序使用swiper组件实现类3D轮播图
2018/08/29 Javascript
vue中上传视频或图片或图片和文字一起到后端的解决方法
2019/12/01 Javascript
React中使用UMEditor的方法示例
2019/12/27 Javascript
微信小程序自定义底部弹出框动画
2020/11/18 Javascript
对python字典元素的添加与修改方法详解
2018/07/06 Python
python配置文件写入过程详解
2019/10/19 Python
python双端队列原理、实现与使用方法分析
2019/11/27 Python
pandas-resample按时间聚合实例
2019/12/27 Python
python requests.get带header
2020/05/05 Python
python实现mean-shift聚类算法
2020/06/10 Python
python中np是做什么的
2020/07/21 Python
python+playwright微软自动化工具的使用
2021/02/02 Python
中医临床专业自我鉴定范文
2014/01/15 职场文书
安全承诺书格式
2014/05/21 职场文书
本科生自荐信
2014/06/18 职场文书
擅自离岗检讨书
2014/09/12 职场文书
在宿舍喝酒的检讨书
2014/09/28 职场文书
文明家庭事迹材料
2014/12/20 职场文书
清明节网上祭英烈寄语2015
2015/03/04 职场文书
国庆节主题班会
2015/08/15 职场文书
党员读书活动心得体会
2016/01/14 职场文书