m_Orchestrate learning system---三十五、php数据和js数据的解耦:php数据(php代码)不要放到js代码中

一、总结

一句话总结:也就是以html为中介,用html存储数据,用js取数据

html 存 js 取 html 中介
json JSON.parse() html()

可以放在div标签里面,js中使用的时候直接找到这个div拿就可以了

也就是以html为中介

用html存储数据

  1. <div id="fry_analyze_record_graph_{$vo['ar_id']}_option_data" style="display: none;">
  2. {$vo['option_data_json']}
  3. </div>

用js取数据

  1. $('.fry_analyze_record_graph').change(function () {
  2. var option_data_div_id=$(this).attr('id')+'_option_data';
  3. var option_data=JSON.parse($('#'+option_data_div_id).html());

1、js数组转化为json数据?

JSON.stringify() JSON.parse()

jquery3.0后鼓励我们用元素的js和json间数据转换的方法

1、JS对象转JSON

方式:JSON.stringify(obj)

  1. var json = {"name":"iphone","price":666}; //创建对象;
  2. var jsonStr = JSON.stringify(json); //转为JSON字符串
  3. console.log(jsonStr);

  

2、JS数组转JSON

  1. //数组转json串
  2. var arr = [1,2,3, { a : 1 } ];
  3. JSON.stringify( arr );

  

3、JS对象数组转JSON

  1. //数组转json串
  2. var arr = [1,2,3, { a : 1 } ];
  3. JSON.stringify( arr );

4、JSON转JS数组

  1. //json字符串转数组
  2. var jsonStr = '[1,2,3,{"a":1}]';
  3. var jsarr=JSON.parse( jsonStr );
  4. alert(jsarr[0]);

  

5、JSON转JS对象

  1. var jsonString = '{"bar":"property","baz":3}';
  2. var jsObject = JSON.parse(jsonString); //转换为json对象
  3. alert(jsObject.bar); //取json中的值

2、php出队操作?

array_shift()

Example #1 array_shift() example

<?php
$stack = array("orange", "banana", "apple", "raspberry");
$fruit = array_shift($stack);
print_r($stack);
?>

Exemplul de mai sus va afișa:

  1. Array
  2. (
  3. [0] => banana
  4. [1] => apple
  5. [2] => raspberry
  6. )

and orange will be assigned to $fruit.

3、在数据库中存储json时最常见的错误是什么?

数组 转化 json

忘记将数组转化为json,不转化的话直接存php数组是没办法存的

第12行 12 $analyze_record_group['arg_column_fields']=json_encode($arg_column_fields);

  1. public function saveRecordGroupData(){
  2. if(request()->isAjax()){
  3. $arg_id=input('arg_id');
  4. $mef_data=input('mef_data');
  5. $analyze_record_group=db('analyze_record_group')->find($arg_id);
  6. $analyze_record_group['arg_update_time']=time();
  7. $analyze_record_group['arg_data']=$mef_data;
  8. //得記錄列名
  9. $mef_data_1=json_decode($mef_data);
  10. $arg_column_fields=$mef_data_1[0];
  11. array_shift($arg_column_fields);
  12. $analyze_record_group['arg_column_fields']=json_encode($arg_column_fields);
  13. //dump($analyze_record_group);die;
  14. $ans=db('analyze_record_group')->update($analyze_record_group);
  15. if($ans===false) return false;
  16. else return true;
  17. }
  18. return false;
  19. }

4、从数据库取数据时候的注意事项是什么?

排序 order

养成排序的好习惯,不要因为数据库数据的存储而造成数据乱序

  1. $analyze_record_groups=db('analyze_record_group')->alias('arg')->join('analyze_record ar','ar.ar_id=arg.arg_ar_id')->where($map)->order('arg_id asc')->select();

5、php如何将以行为主的二维数组转化为以列为主的二维数组?

列 行 遍历

以列-行的方式做遍历即可

  1. //以列->行的方式將儲存數據的二維數組裡面每一個參數對應的數據都提取出來
  2. for ($j=0;$j<$arg_data_column_length;$j++){
  3. $arg_data_process_data2_j=[];//每一列的數據
  4. for($i=0;$i<$arg_data_length;$i++){
  5. $arg_data_process_data2_j[]=$val1['arg_data'][$i][$j];
  6. }
  7. //將列名放到數組的鍵上,指向對應的值,比如高度
  8. $arg_key=$arg_data_process_data2_j[0];
  9. unset($arg_data_process_data2_j[0]);
  10. $arg_data_process_data2[$arg_key]=$arg_data_process_data2_j;
  11. }

需求就是将下面的数组转化为以列为主

  1. array(4) {
  2. [0] => array(6) {
  3. [0] => string(14) "time_param_fry"
  4. [1] => string(10) "luminosity"
  5. [2] => string(3) "aaa"
  6. [3] => string(16) "temperature(℃)"
  7. [4] => string(8) "humidity"
  8. [5] => string(3) "bbb"
  9. }
  10. [1] => array(6) {
  11. [0] => string(4) "27/2"
  12. [1] => string(2) "11"
  13. [2] => string(1) "1"
  14. [3] => string(2) "17"
  15. [4] => string(2) "73"
  16. [5] => string(2) "34"
  17. }
  18. [2] => array(6) {
  19. [0] => string(3) "1/3"
  20. [1] => string(2) "31"
  21. [2] => string(1) "2"
  22. [3] => string(2) "21"
  23. [4] => string(2) "72"
  24. [5] => string(1) "5"
  25. }
  26. [3] => array(6) {
  27. [0] => string(9) "First Day"
  28. [1] => string(1) "1"
  29. [2] => string(1) "3"
  30. [3] => string(1) "2"
  31. [4] => string(1) "3"
  32. [5] => string(1) "6"
  33. }
  34. }

结果

  1. array(6) {
  2. ["time_param_fry"] => array(3) {
  3. [1] => string(4) "27/2"
  4. [2] => string(3) "1/3"
  5. [3] => string(9) "First Day"
  6. }
  7. ["luminosity"] => array(3) {
  8. [1] => string(2) "11"
  9. [2] => string(2) "31"
  10. [3] => string(1) "1"
  11. }
  12. ["aaa"] => array(3) {
  13. [1] => string(1) "1"
  14. [2] => string(1) "2"
  15. [3] => string(1) "3"
  16. }
  17. ["temperature(℃)"] => array(3) {
  18. [1] => string(2) "17"
  19. [2] => string(2) "21"
  20. [3] => string(1) "2"
  21. }
  22. ["humidity"] => array(3) {
  23. [1] => string(2) "73"
  24. [2] => string(2) "72"
  25. [3] => string(1) "3"
  26. }
  27. ["bbb"] => array(3) {
  28. [1] => string(2) "34"
  29. [2] => string(1) "5"
  30. [3] => string(1) "6"
  31. }
  32. }

6、jquery找到当前select所选的option的值?

find option :selected
  1. $(this).find("option:selected").val();

jQuery获取Select选择的Text和Value:
var checkText=jQuery("#select_id").find("option:selected").text(); //获取Select选择的Text 
var checkValue=jQuery("#select_id").val(); //获取Select选择的option Value 
var checkIndex=jQuery("#select_id ").get(0).selectedIndex; //获取Select选择的索引值 
var maxIndex=jQuery("#select_id option:last").attr("index"); //获取Select最大的索引值

jQuery添加/删除Select的Option项:
jQuery("#select_id").append("<option value='Value'>Text</option>"); //为Select追加一个Option(下拉项) 
jQuery("#select_id").prepend("<option value='0'>请选择</option>"); //为Select插入一个Option(第一个位置) 
jQuery("#select_id option:last").remove(); //删除Select中索引值最大Option(最后一个) 
jQuery("#select_id option[index='0']").remove(); //删除Select中索引值为0的Option(第一个) 
jQuery("#select_id option[value='3']").remove(); //删除Select中Value='3'的Option 
jQuery("#select_id option[text='4']").remove(); //删除Select中Text='4'的Option

内容清空:
jQuery("#select_id").empty();

7、js判断为数组?

Array isArray()

1.对于Javascript 1.8.5(ECMAScript 5),变量名字.isArray( )可以实现这个目的

  1. 1 var a=[];
  2. 2 var b={};
  3. 3 Array.isArray(a);//true
  4. 4 Array.isArray(b)//false

2.如果你只是用typeof来检查该变量,不论是array还是object,都将返回‘objec'。 此问题的一个可行的答案是是检查该变量是不是object,

并且检查该变量是否有数字长度(当为空array时长度也可能为0,object的长度为undefined)。

  1. var a=[];
  2. var b={};
  3. typeof a === 'object' && !isNaN(a.length)//true
  4. typeof b === 'object' && !isNaN(b.length)//false

3.调用toString( )方法试着将该变量转化为代表其类型的string。

  1. var a=[];
  2. var b={};
  3. Object.prototype.toString.call(a) === '[object Array]'//true
  4. Object.prototype.toString.call(b) === '[object Array]'//false

8、php数据和js数据的解耦:php数据(php代码)不要放到js代码中?

html 存 js 取
json JSON.parse() html()

可以放在div标签里面,js中使用的时候直接找到这个div拿就可以了

也就是以html为中介

用html存储数据

  1. <div id="fry_analyze_record_graph_{$vo['ar_id']}_option_data" style="display: none;">
  2. {$vo['option_data_json']}
  3. </div>

用js取数据

  1. $('.fry_analyze_record_graph').change(function () {
  2. var option_data_div_id=$(this).attr('id')+'_option_data';
  3. var option_data=JSON.parse($('#'+option_data_div_id).html());

9、js自执行表达式的方法?

eval(string)

定义和用法

eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。

语法

  1. eval(string)
参数 描述
string 必需。要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句。

返回值

通过计算 string 得到的值(如果有的话)。

说明

该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。因此请不要为 eval() 函数传递 String 对象来作为参数。

如果试图覆盖 eval 属性或把 eval() 方法赋予另一个属性,并通过该属性调用它,则 ECMAScript 实现允许抛出一个 EvalError 异常。

抛出

如果参数中没有合法的表达式和语句,则抛出 SyntaxError 异常。

如果非法调用 eval(),则抛出 EvalError 异常。

如果传递给 eval() 的 Javascript 代码生成了一个异常,eval() 将把该异常传递给调用者。

提示和注释

提示:虽然 eval() 的功能非常强大,但在实际使用中用到它的情况并不多。

实例

例子 1

在本例中,我们将在几个字符串上运用 eval(),并看看返回的结果:

  1. <script type="text/javascript">
  2.  
  3. eval("x=10;y=20;document.write(x*y)")
  4.  
  5. document.write(eval("2+2"))
  6.  
  7. var x=10
  8. document.write(eval(x+17))
  9.  
  10. </script>

输出:

  1. 200
  2. 4
  3. 27

10、js的string转化为json?

JSON.parse(jsonstr)

1、jQuery插件支持的转换方式: 

示例:

$.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象

2、浏览器支持的转换方式(Firefox,chrome,opera,safari,ie)等浏览器:

示例:

JSON.parse(jsonstr); //可以将json字符串转换成json对象

JSON.stringify(jsonobj); //可以将json对象转换成json对符串

注:ie8(兼容模式),ie7和ie6没有JSON对象,推荐采用JSON官方的方式,引入json.js。

3、Javascript支持的转换方式:

eval('(' + jsonstr + ')'); //可以将json字符串转换成json对象,注意需要在json字符外包裹一对小括号

注:ie8(兼容模式),ie7和ie6也可以使用eval()将字符串转为JSON对象,但不推荐这些方式,这种方式不安全eval会执行json串中的表达式。

4、JSON官方的转换方式: 

 

http://www.json.org/提供了一个json.js,这样ie8(兼容模式),ie7和ie6就可以支持JSON对象以及其stringify()和parse()方法;

可以在https://github.com/douglascrockford/JSON-js上获取到这个js,一般现在用json2.js。

11、页面重新加载?

document loaction reload()
  1. document.location.reload();

12、js获取json对象的key和val?

option_data[selected_column] []
for in ==
  1. <script type="text/javascript">
  2. getJson('age');
  3.  
  4. function getJson(key){
  5. var jsonObj={"name":"傅红雪","age":"24","profession":"刺客"};
  6. //1、使用eval方法
  7. var eValue=eval('jsonObj.'+key);
  8. alert(eValue);
  9. //2、遍历Json串获取其属性
  10. for(var item in jsonObj){
  11. if(item==key){ //item 表示Json串中的属性,如'name'
  12. var jValue=jsonObj[item];//key所对应的value
  13. alert(jValue);
  14. }
  15. }
  16. //3、直接获取
  17. alert(jsonObj[''+key+'']);
  18. }
  19. </script>
  1. // var option_data_selected=null;
  2. // for(var x in option_data){
  3. // if(x==selected_column){
  4. // option_data_selected=option_data_selected[x]
  5. // }
  6. // }
  7. var option_data_selected=option_data[selected_column];
  8. console.log(option_data_selected);

二、内容在总结中

 

m_Orchestrate learning system---三十五、php数据和js数据的解耦:php数据(php代码)不要放到js代码中的更多相关文章

  1. JMeter学习(三十五)使用jmeter来发送json/gzip格式数据

    一.使用jmeter来发送gzip数据 有时候我们需要模拟在客户端将数据压缩后, 发送(post)到服务器端. 通常这种情况,会发生在移动终端上. 这样做的好处, 是可以节省流量.  当然, 服务器返 ...

  2. JAVA之旅(三十五)——完结篇,终于把JAVA写完了,真感概呐!

    JAVA之旅(三十五)--完结篇,终于把JAVA写完了,真感概呐! 这篇博文只是用来水经验的,写这个系列是因为我自己的java本身也不是特别好,所以重温了一下,但是手比较痒于是就写出了这三十多篇博客了 ...

  3. FreeSql (三十五)CodeFirst 自定义特性

    比如项目内已经使用了其它 orm,如 efcore,这样意味着实体中可能存在 [Key],但它与 FreeSql [Column(IsPrimary = true] 不同. Q: FreeSql 实体 ...

  4. NeHe OpenGL教程 第三十五课:播放AVI

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  5. Deep learning:三十八(Stacked CNN简单介绍)

    http://www.cnblogs.com/tornadomeet/archive/2013/05/05/3061457.html 前言: 本节主要是来简单介绍下stacked CNN(深度卷积网络 ...

  6. Gradle 1.12用户指南翻译——第三十五章. Sonar 插件

    本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  7. SQL注入之Sqli-labs系列第三十四关(基于宽字符逃逸POST注入)和三十五关

    开始挑战第三十四关和第三十五关(Bypass add addslashes) 0x1查看源码 本关是post型的注入漏洞,同样的也是将post过来的内容进行了 ' \ 的处理. if(isset($_ ...

  8. Python进阶(三十五)-Fiddler命令行和HTTP断点调试

    Python进阶(三十五)-Fiddler命令行和HTTP断点调试 一. Fiddler内置命令   上一节(使用Fiddler进行抓包分析)中,介绍到,在web session(与我们通常所说的se ...

  9. centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课

    centos   shell脚本编程1 正则  shell脚本结构  read命令  date命令的用法  shell中的逻辑判断  if 判断文件.目录属性  shell数组简单用法 $( ) 和$ ...

  10. 剑指Offer(三十五):数组中的逆序对

    剑指Offer(三十五):数组中的逆序对 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/bai ...

随机推荐

  1. Windows下Ionic Android开发环境搭建

    转自 http://www.itwap.net/ArticleContent.aspx?id=26 来源: itwap.net 作者: 词略 时间: 2015-4-2 16:57:28 (一)Ioni ...

  2. CoreSight介绍篇

    ARM的嵌入式IDE发展: 1)SDT,英文全称ARM SoftWare Development Kit,是ARM为方便用户在ARM芯片进行应用软件开发而推出的一整套开发工具. 2)ADS,英文全称A ...

  3. lnmp搭建环境易错误点

    1.虚拟主机使用桥接网络 2.nginx配置server 3.先ping通,service iptables stop 4.php-fpm开启,使之能正确解析php文件,nginx开启 5.mysql ...

  4. eclipse调优

    基于Eclipse 4.7.0 (Oxygen) 目的:加快eclipse启动速度 修改eclipse安装目录下配置文件eclipse.ini(1)指定eclipse运行的jre,不让其进行搜索-vm ...

  5. 把kafka数据从hbase迁移到hdfs,并按天加载到hive表(hbase与hadoop为不同集群)

    需求:由于我们用的阿里云Hbase,按存储收费,现在需要把kafka的数据直接同步到自己搭建的hadoop集群上,(kafka和hadoop集群在同一个局域网),然后对接到hive表中去,表按每天做分 ...

  6. Linux服务器---apache支持cgi

    Apache支持cgi  1.打开Apache配置文件httpd.conf,搜索“cgi”,找到下面的一段,去掉“addhandler”前面的“#“,这样就开启了Apache的cgi功能 [root@ ...

  7. ES6之前模拟Map数据结构的写法

    在ES6之前JavaScript 里面本身没有map对象,但是用JavaScript的Array.Object来模拟实现Map的数据结构. 现在已经有Map对象了,这里记录一下之前的写法 Array方 ...

  8. ACM题目————A Knight's Journey

    Description BackgroundThe knight is getting bored of seeing the same black and white squares again a ...

  9. (五)使用GitHub的前期准备

    创建账户 创建账号成功后将得到一个个人的公开页面URL:https://github.com/xkfx. 设置头像 设置SSH Key SSH 为 Secure Shell 的缩写. from bai ...

  10. c++获取时间戳

    vc获取时间戳的代码如下: SYSTEMTIME st; }; GetLocalTime(&st); // vc专用 _snprintf_s(ts, sizeof(ts), "%4d ...