[问题总结]
1.今天在写毕设项目的时候,后台传一个数据到html页面隐藏域,但是前端通过隐藏域取值时,取到的是一个字符串而不是一个对象。于是查了一下解析JSON字符串为JSON数据格式的问题。得到了以下方法:
(1)$.parseJSON()
$.parseJSON():将格式完好的JSON字符串转为与之对应的JavaScript对象。
例如:
var obj = $.parseJSON('{"name":"John"}'); alert( obj.name === "John" );
格式完好的意思是要严格遵守JSON格式,传入格式有误的 JSON 字符串可能导致抛出异常。例如,下面这些无效的 JSON 字符串:
{test: 1}
(test 没有使用双引号包裹).{'test': 1}
('test' 用了单引号而不是双引号包裹).
"{test: 1}"
(test 没有使用双引号包裹)."{'test': 1}"
('test' 用了单引号而不是双引号包裹)."'test'"
('test' 用单引号代替双引号).".1"
(number 必须以数字开头;"0.1"
将是有效的)."undefined"
(undefined
不能表示一个 JSON 字符串; 然而null
,可以)."NaN"
(NaN
不能表示一个 JSON 字符串; 用Infinity
直接表示无限也是不允许的).
JSON标准不允许“控制字符”如制表符或换行符。比如$.parseJSON('{"testing":"1 2
3"}')
,大多数实现中将抛出一个错误,因为JavaScript分析器直接转换字符串的制表符和换行符为文本的制表符和换行符;产生双反斜杠,例如"1\t2\n3"
是预期的结果。
(2)$.eval():用于计算并执行以字符串表示的JavaScript代码。(由于eval()函数能执行任意代码因此会带来安全问题)
对于服务器返回的JSON字符串,如果jquery异步请求没做类型说明,或者以字符串方式接收,那么需要做一次对象化处理,就是将该字符串放于eval()中执行一次:
var dataObj=eval("("+data+")"); // 转换为json对象
而使用eval解析JSON对象方法如下:
var json = eval('({name:"Jane",age:25,job:"teacher"})'); document.write(json.name); // Jane document.write(json.age); // 25 document.write(json.job); // teacher
这两种方法都不是太理解,不过现在懂得了后台和前端传值不能直接使用,要通过转换之后才能使用。
2.在自定义ajax()方法的时候,想要改变不同的success函数值可以将传入的参数封装成一个对象:
function doAjax( obj ); // 自定义一个ajax方法 $(window).on("load",function(){ var param={ type : ' post ', data : { name : "Jane", age : "25", job : "teacher" }, dataType : "json", success : function(){ alert("Jane is a girl"); } }; //第一个对象 var otherParam={ type : ' post ', data : { name : "Jim", age : "27", job : "doctor" }, dataType : "json", success : function(){ alert("Jim is a boy"); } }; //第二个对象 doAjax(param); //第一个对象作为参数传给doAjax方法 doAjax(otherParam); //第二个对象作为参数传给doAjax方法 })
当要传入一个自定义函数的参数很多,并且无法统一函数有哪些参数的时候,可以将参数封装成一个对象传入。