#每日总结#3

[问题总结]

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方法

})

      当要传入一个自定义函数的参数很多,并且无法统一函数有哪些参数的时候,可以将参数封装成一个对象传入。

原文地址:https://www.cnblogs.com/koto/p/5389522.html