工作的内容遇到了一个页面要求做出类似于淘宝的商品搜索页的任务,做出来后回头总结了下,一头的汗,这点东西却废了不少的时间,主要时间都花在了调试上,做一点调试一点,还是不熟悉,也遇到了一些以前不太注意的问题。
JSON传值我知道,用$.parseJSON把后台传过来的值转化为JSON对象,然后用js遍历出来写到页面里就可以。但如果一次想传多种值出来呢,比方array1是要遍历的内容array2是标志数据类似与总数啊第几页啊,这些合在一起放在一个数组里传过来,不能都按一个格式遍历到页面里吧,怎么办?有的说用substr str_replace等等函数来取出对应的值,有的说要用JSON.js提供的函数来处理json对象,可以对JSON对象增删改,功能是很强大,但我总有点杀鸡用牛刀的感觉,不过是想要两种数据放在两个位置而已,最后我把两种数据都组合在一个数组里去了,组合结果成了三维数组,有点象这样
Array{
Content=>{
0=>{
Id=>01,
Title=>title1,
Price=>01
}
1=>{
Id=>02,
Title=>title2,
Price=>02
}
2=>{
….
}
}
Page=>{
0=>{
Page=>01,
Title=>title,
Price=>01
}
2=>{
Page=>02
Title=>title2,
Piece=>02
}
3=>{
…...
}
}
Count=>20
}
现在我可以用data.content去遍历content的内容,data.page去遍历page的内容,data.count来做静态分页了,好吧虽然很简单,但是这可是我试验了用函数截取,用json.js中提供的函数处理json对象,最后找出来最合适的一个小思路.
json传值时还会遇到取出的字符串含有换行,空格和一些控制字符的情况,这时候直接往页面插,或者传递给js函数就会出现错误,这时候有两种处理,第一在php端处理取出来的数据,一种是js段处理,其实处理都还是挺简单的,主要是要注意这种情况,要不出错了不知道哪里有问题,一点点调试可就废时间了,其实我认为这种带控制字符的值就不该存在数据库里,不过这种事只能自己注意,总不能把已经存进去的数据全处理一遍再存进去吧。一般在服务段进行一些简单处理,剩下再有问题交给js来处理就可以了,服务端使用正则替换这些特殊的常用字符,然后在json_encode,页面处理起来就会方便得多,我将一些常遇到的特殊字符放在数组里,用preg_replace来处理
$search = array ("'<script[^>]*?>.*?</script>'si",
"'<[\/\!]*?[^<>]*?>'si", // 去掉 HTML 标记
"'([\r\n])[\s]+'", // 去掉空白字符
"'&(quot|#34);'i", // 替换 HTML 实体
"'&(amp|#38);'i",
"'&(lt|#60);'i",
"'&(gt|#62);'i",
"'&(nbsp|#160);'i",
"'&(iexcl|#161);'i",
"'&(cent|#162);'i",
"'&(pound|#163);'i",
"'&(copy|#169);'i",
"'&#(\d+);'e"); // 作为 PHP 代码运行
$replace = array ("",
"",
"\\1",
"\"",
"&",
"<",
">",
" ",
chr(161),
chr(162),
chr(163),
chr(169),
"chr(\\1)");
$text = preg_replace ($search, $replace, $str);
3
json对象取值一般情况下按照下标属性取值就可以,比方data[0].title,data.page.title,注意使用$.parseJSON过的json字符串就是对象,下标不是数值的就要用.来取值。但是对于一些下标混乱而且下标不定的json取值就要用遍历了,遍历的时候不知道下标,又不能用i++来循环,就需要用到js的for...in循环,这个有点像php的foreach了,对于取对象还是很方便的,好吧,其实我承认我经常把php和js的用法搞乱。
For(var i=0;i<=obj.length;i++){
For(v in obj[i]){
Alert(obj[i][v]);
}
}
注意这里你不能用alert(obj[i].v)来取值,因为v在这里只是代表遍历出来的一个下标,v本身并不是obj[0]这个对象的一个属性
4
JSON中文乱码问题解决方案,如果页面和数据库的编码不是统一的utf-8编码,就经常会出现中文乱码问题,所以编码文档,html,和数据库数据最好一致使用utf-8,这会省了很多麻烦,但是如果你的愿望不足以影响整个任务进程,那么就需要使用一些函数进行编码的转换后再传JSON值,在php端使用json_encode前使用urlencode进行URL编码,然后在客户端使用js函数decordurl()进行URL解码后再读取中文信息,就不会有错了