浅谈js对json_encode(PHP)后的对象处理方法

为了减小服务端请求的数据,通常不会采用刷新页面的方式获取新数据,尤其是增量数据,采用ajax请求,服务器端返回一个json类型的数组的方式。

 

这里以PHP的json_encode()函数为例,简述其交互过程。

 

前端:

 

使用ajax请求PHP页面(这里用jquery.ajax的GET方法)

 

$.ajax({
  type: "GET",
  url: "/index.php?mod=xxx&p="+id+"&tm="+Math.random(),
  dataType:"json",
  success: function(msg){
   var result = new Array();
   result = eval(msg);
 var newhtml += '';
   for(x in result) 
   {
  newhtml += result[x]['name'];
   }
   alert(newhtml);
 }
});

服务端 :

 

        假设arrA是一个要返回的数组。可以通过下面这段代码将其返回。

 

<?php
echo json_encode($arrA);
?>

需要注意的是:

PHP中json_encode函数return的结果是string的形式,所以前端还需要通过eval()函数来以JS代码形式执行这段string

把结果保存到一个数组里,接下来只要遍历数组元素就可以了。

python学习笔记

在python中的每一个对象都可以 不可变形或者可变形。在核心类型中,数字,字符串和元组是不可变的;列表和字典不是这样(他们可以完全自由地改变)。在其他方面,这种不可变性可以用来保证在程序中保持一个对象固定不变。

 

字符串操作:

len(s)

s.find('pa')

"a %s parrot" % kind 字符串格式化表达式

"a {0} parrot".format(lkind) 字符串格式化方法

s.rstrip() 移除空格

s.replace('pa','xx') 替换

s.split(',') 分隔

s.isdigit() 内容测试

s.lower() 短信息转换

s.endswith('spam') 结束测试

'spam'.join(strlist) 插入分隔符

for x in S 迭代

'spam' in S 成员关系

[c*2 for c in S]

map(ord,S)

 

 

print('-'*80)

 

——————————————————————————–

这样感觉蛮好用的 如果在操作界面上可以不用狂按住‘-’来展示

js 正则使用

var myString="<?php echo $voucher_data['remarks']?>";
var myregex_1 = new RegExp("NETS");
var myregex_2 = new RegExp("Cash");
if (myregex_1.test(myString)){
  $("#payment").val("NETS");
}
if (myregex_2.test(myString)){
  $("#payment").val("Cash");
}

linux下查看磁盘空间

如果要查看磁盘还剩多少空间,当然是用df的命令了。
[root@localhost ~]# df -h 
文件系统              容量 已用 可用 已用% 挂载点 
/dev/sda2              14G   11G 2.6G 82% / 
/dev/sda1              99M   14M   81M 14% /boot 
tmpfs                 442M 275M 168M 63% /dev/shm 
/dev/mapper/vg_test-lv_test 
                       24M 1.3M   21M   6% /mnt/lvm 
[root@localhost ~]#
当然你可能并不关系磁盘还剩余多少空间,你是需要知道当前的文件夹下的磁盘使用情况:
[root@localhost ~]# du –max-depth=1 -h 
24K     ./.gnome   www.2cto.com  
8.0K    ./.eggcups 
8.0K    ./.config 
136K    ./.gnome2 
16K     ./.chewing 
8.0K    ./.gnome2_private 
8.0K    ./.Trash 
224K    ./.gstreamer-0.10 
28K     ./Desktop 
48K     ./.nautilus 
48K     ./.metacity 
240K    ./.scim 
3.4M    ./.mozilla 
1012K   ./.kde 
12K     ./.superkaramba 
40K     ./.local 
8.0K    ./.qt 
272K    ./.gconf 
32K     ./.mcop 
16K     ./.redhat 
1.7M    ./.thumbnails 
8.0K    ./.gconfd 
7.5M    . 
[root@localhost ~]#
看上面使用了du –max-depth=1 -h的命令来查找磁盘的使用情况,因为后面没有跟路径,它就默认是当前的路径。这个命令的-h参数是为了方便你读懂每个文件的大小,如果没有这个参数显示的文件大小就没有k,M,G等。执行命令后,前面n-1行的是该目录下每个文件夹的大小。最后一行显示的是该目录总的大小。
然后你会说不在乎该目录下每个文件的大小,你只想知道其中某一个文件(文件夹)的大小,那么有没有办法呢?当然你应该记得,我一直强调的,方法总比问题多,这儿也不例外。
请看下面的例子:
[root@localhost ~]# du -sh 
7.5M    .   www.2cto.com  
[root@localhost ~]#
聪明的你一定发现了这里显示的大小和上面最后一行的大小是一样的。这就是说这里显示的大小是该目录的总大小。
我知道你心里在冷笑,不是方法比问题多吗?这里说的也只有一个答案。当然,我不会让你失望的。另一个方法比较土,但是还是可以解决问题的。
[root@localhost ~]# du -h –max-depth=0 
7.5M    . 
[root@localhost ~]#
我想告诉你的是man手册里面已经告诉了:–max-depth=0的功能和-s的功能是一样的。
当然你也可以通过sed打印最后du -h –max-depth=1一行来解决问题,但我并不推荐。
这里涉及到一个原则,尽量使用命令提供选项的原始功能。如果命令没有提供该功能,才需要我们自己使用grep,sed,awk来选取我们需要的行。
当然du命令后面可以跟文件路径,来查看指定路径的大小的。
[root@localhost ~]# du -sh /opt/oracle 
5.6G    /opt/oracle 
[root@localhost ~]#
如果磁盘过大,那么查看文件大小就比较忙,请等一会,呵呵。
 
 
作者 tl_oni

session的工作原理

今天在研究ci的session问题 ,顺便复习一下基础的session原理。

一直在使用session存储数据,一直没有好好总结一下session的使用方式以及其工作原理,今天在这里做一下梳理。

这里的介绍主要是基于php语言,其他的语言操作可能会有差别,但基本的原理不变。

 

1.在php中如何操作session:

session_start();   //使用该函数打开session功能

$_SESSION       //使用预定义全局变量操作数据

使用unset($_SESSION['key']) //销毁一个session的值

简单地操作,一切都是由服务器实现;由于处理在后台,一切看起来也很安全。但是session采用什么样机制,又是怎样被实现,并且如何来保持会话的状态的呢?

 

2.session实现与工作原理

浏览器和服务器采用http无状态的通讯,为了保持客户端的状态,使用session来达到这个目的。然而服务端是怎么样标示不同的客户端或用户呢?

这里我们可以使用生活中的一个例子,假如你参加一个晚会,认识了很多人,你会采取什么方式来区分不同的人呢!你可能根据脸型,也有可能根据用户的名字,

或者人的身份证,即采用一个独一无二的标示。在session机制中,也采用了这样的一个唯一的session_id来标示不同的用户,不同的是:浏览器每次请求都会带上

由服务器为它生成的session_id.

简单介绍一下流程:当客户端访问服务器时,服务器根据需求设置session,将会话信息保存在服务器上,同时将标示session的session_id传递给客户端浏览器,

浏览器将这个session_id保存在内存中(还有其他的存储方式,例如写在url中),我们称之为无过期时间的cookie。浏览器关闭后,这个cookie就清掉了,它不会存在用户的cookie临时文件。

以后浏览器每次请求都会额外加上这个参数值,再服务器根据这个session_id,就能取得客户端的数据状态。

如果客户端浏览器意外关闭,服务器保存的session数据不是立即释放,此时数据还会存在,只要我们知道那个session_id,就可以继续通过请求获得此session的信息;但是这个时候后台的session还存在,但是session的保存有一个过期

时间,一旦超过规定时间没有客户端请求时,他就会清除这个session。

下面介绍一下session的存储机制,默认的session是保存在files中,即以文件的方式保存session数据。在php中主要根据php.ini的配置session.save_handler

 来选择保存session的方式。

这里顺便说明一下,如果要做服务器的lvs,即多台server的话,我们一般使用memcached的方式session,否则会导致一些请求找不到session。

一个简单的memcache配置:

session.save_handler = memcache

session.save_path = "tcp://10.28.41.84:10001"

当然如果一定要使用files文件缓存,我们可以将文件作nfs,将所有的保存session文件定位到一个地方。

刚才讲返回给用户的session-id最终保存在内存中,这里我们也可以设置参数将其保存在用户的url中。

 

3.实例问题

现有系统A,B; 假设A系统是可以独立运行的web系统,即可以和浏览器直接处理session, B系统是基于mobile的,需要调用A系统的功能接口,

在保持A不改变的情况下,即登陆验证,session存储都不变的情况下,B系统能处理前端用户的请求。

这里提供的方案是使用PHP实现

在用户登陆成功后,将保存的session的session-id返回给B系统,然后B系统每次请求其他接口都带session_id。

A系统在session_start前加上session_id(session_id);

这样B系统就能安全的调用A

转自:http://www.cnblogs.com/kucongzhi/archive/2010/07/13/1776728.html

CodeIgniter的Session问题[转]

最近有个项目接触到CodeIgniter,让我很是惊叹它的精巧,于是决定用它来做下一个项目。果然,蜜月期过了,毛病就出来了,具体的就是Session的问题。CodeIgniter的Session有两种方式,默认的Session是用Cookie来存储的,也可以切换到数据库存储,但是无论哪种Session都会有些很致命的问题,就是丢失数据。

 

问题解决了,但是也有局限,

第一 $this->session->sess_create() 和$this->session->sess_destroy() 不见了, 这倒无所谓,没太大影响, 可以用 $this->session->destroy(),

第二,这修改了CodeIgniter的system library,并不是特别好的解决方法。。。

然后访问 A, 比如  http://localhost/A, 点提交之后应该刷新,在刷新后的页面上显示出来 1234, 然后神奇的事情发生了。。。 Session没了, 对于redirect, CodeIgniter自动的创建了一个新的session,同样的道理,如果用Ajax访问,也会有个新的Session被创立,结果导致了这个Session根本不能用!

折腾了整整一天也没什么效果,后来在github上面找到了一个大牛自己改写的Session Library, 核心就是弃用cookie,转而使用php native session, 保留了一些基本功能,比如 set_userdata(),这需要用下面的代码 覆盖 system/libraries/Session.php 文件

哎~ 不过不管怎么说,解决了, 浪费了整整1天的时间。。。

这里https://github.com/EllisLab/CodeIgniter/wiki/Native-session

转自:http://www.cnblogs.com/lei1016cn/archive/2012/10/10/2719028.html

 

简单的前段知识汇总

今天开始要记录一些工作中遇到的一些简单的问题,比如说jquery的$.each用法,seelct的选择器等非常基础的东西,因为每次用的时候我都回去baidu而不会记住,总觉得很简单没有必要去尝试记忆。

好吧从今天开始。

jquery $.each 的用法:

var arr2 = [['a', 'aa', 'aaa'], ['b', 'bb', 'bbb'], ['c', 'cc', 'ccc']];
$.each(arr, function(i, item){      
      alert(i);   
      alert(item);      
});  

 

今天遇到了一个select选择器的问题:

var selects = $("select[name='is_jion']");
$.each(selects,
function(i, item) {
 if (item.value == 'Y') {
  alert('Please note that staff participating in the Best Dressed Contests, can only participate either in the Best Dressed Individual category or in the Best Dressed Table category');
  $('#is_table_jion').removeAttr('checked');
  return false;
 }  
});

 

是这样的,我开始使用了$("select[@name='xxxxx']")不能用,后来尝试使用了$("select[name='is_jion']").val();

还是不能用,这个时候我就aler了一下$("select[name='is_jion']")发现他是dom的元素,不是jquery的对象,所以使用了dom的方法。

 

$(this).closest('td').next().find('select').val('0');
$(this).closest('td').next().find('select').html(def);
选择下一个td里的select 这个时候select就是jquery对象了,可以使用jquery方法处理
上次看的文章还是蛮好的 详细解说了dom对象和 jquery对象的区别要然我总是混为一谈
feo rsvp里还是用到很多js的用法的