Submitted by gouki on 2010, August 24, 2:04 PM
在PHP中,我们打印一个数组或者对象的时候,都是用print_r,相对比较直观,可是javascript就不行。翻了翻资料,也看到一些代码的写法。这里是一个简单的处理(不能打印window,document等对象):
JavaScript代码
    - function print_r( $value ){  
 
    -     if($value.constructor == Array || $value.constructor == Object ){  
 
    -         document.write("<ul>");  
 
    -         for (var $i in $value){  
 
    -             if($value[$i].constructor == Array || $value[$i].constructor == Object ){  
 
    -                 document.write("<li>["+$i+"] => " + typeof( $value ) + " </li><ul>");  
 
    -                 print_r($value[$i]);  
 
    -                 document.write("</ul>");  
 
    -             }else{  
 
    -                 document.write("<li>["+$i+"] => " + $value[$i] + "</li>");  
 
    -             }  
 
    -         }  
 
    -         document.write("</ul>");  
 
    -     }  
 
    - }  
 
    - var s = {};  
 
    - s.i = '123';  
 
    - s.o = {};  
 
    - s.o.test = 'tt';  
 
    - print_r(s);  
 
 
 
然后看了一下phpjs.org,它上面的print_r就比较复杂了。。。
JavaScript代码
    - function print_r (array, return_val) {  
 
    -       
 
    -       
 
    -       
 
    -       
 
    -       
 
    -       
 
    -       
 
    -       
 
    -       
 
    -       
 
    -       
 
    -     var output = "", pad_char = " ", pad_val = 4, d = this.window.document;    var getFuncName = function (fn) {  
 
    -         var name = (/\W*function\s+([\w\$]+)\s*\(/).exec(fn);  
 
    -         if (!name) {  
 
    -             return '(Anonymous)';  
 
    -         }        return name[1];  
 
    -     };  
 
    -    
 
    -     var repeat_char = function (len, pad_char) {  
 
    -         var str = "";        for (var i=0; i < len; i++) {  
 
    -             str += pad_char;  
 
    -         }  
 
    -         return str;  
 
    -     };   
 
    -     var formatArray = function (obj, cur_depth, pad_val, pad_char) {  
 
    -         if (cur_depth > 0) {  
 
    -             cur_depth++;  
 
    -         }   
 
    -         var base_pad = repeat_char(pad_val*cur_depth, pad_char);  
 
    -         var thick_pad = repeat_char(pad_val*(cur_depth+1), pad_char);  
 
    -         var str = "";  
 
    -          if (typeof obj === 'object' && obj !== null && obj.constructor && getFuncName(obj.constructor) !== 'PHPJS_Resource') {  
 
    -             str += "Array\n" + base_pad + "(\n";  
 
    -             for (var key in obj) {  
 
    -                 if (obj[key] instanceof Array) {  
 
    -                     str += thick_pad + "["+key+"] => "+formatArray(obj[key], cur_depth+1, pad_val, pad_char);                } else {  
 
    -                     str += thick_pad + "["+key+"] => " + obj[key] + "\n";  
 
    -                 }  
 
    -             }  
 
    -             str += base_pad + ")\n";        } else if (obj === null || obj === undefined) {  
 
    -             str = '';  
 
    -         } else {   
 
    -             str = obj.toString();  
 
    -         }   
 
    -         return str;  
 
    -     };  
 
    -    
 
    -     output = formatArray(array, 0, pad_val, pad_char);   
 
    -     if (return_val !== true) {  
 
    -         if (d.body) {  
 
    -             this.echo(output);  
 
    -         }        else {  
 
    -             try {  
 
    -                 d = XULDocument;   
 
    -                 this.echo('<pre xmlns="http://www.w3.org/1999/xhtml" style="white-space:pre;">'+output+'</pre>');  
 
    -             }            catch (e) {  
 
    -                 this.echo(output);   
 
    -             }  
 
    -         }  
 
    -         return true;    } else {  
 
    -         return output;  
 
    -     }  
 
    - }  
 
 
 
果然是没有做不到的事,只有想不到的事呀。。。(上面的phpjs.org的print_r需要echo方法,请到phpjs.org下载)
 
Tags: print_r, php
Javascript | 评论:0
 | 阅读:23887
Submitted by gouki on 2010, August 23, 12:16 PM
终于,盛大今天放出了锦书的价格,多少钱呢?请看图:

如此说来,那些抢先锦书的朋友就真的是欲哭无泪了。首先花了998,其次,还往帐户里充值50元。算下来比正式版还贵啊。
事实上,我本来是准备买的,但由于群友的实际案例,我放弃了。锦书我想着,使用android系统,对于一些PDF之类的,应该支持也是不错的呀。但事实上锦书却是只支持自己的格式,其他所谓的支持是用软件把它们转换成盛大的格式(转换速度慢,兼容性差,遇到有图片的PDF等还不支持)
一下子,心就哇凉哇凉的。幸好,我没有买,否则看到这个价格,我的心更加凉了。
 
Tags: 盛大, 锦书
Misc | 评论:0
 | 阅读:17535
Submitted by gouki on 2010, August 22, 11:32 PM
用javascript做模版的话,说来也算是比较方便的,特别是对于PHP开发来说,只要扔一个json数组过来。然后剩下的就可以让javascript来完成了。
搜索一下jQuery的plugin,可以找到大约5~6个模版程序。好象用的比较多的还是jTemplate,上一次司徒正美用javascript写了一个简单的例子,这次又写了一个比较详细的,说是v2,有兴趣的朋友可以尝试一下。。
--start--司徒正美认为模版要处理复杂的玩意,所以写的功能就强大了。
本版本主要是对原模板系统进行提速,去掉消耗巨大的辅助函数。本来想用它与John Resig的 Micro-Templating比较一下速度,发现对方无法处理复杂的模板,残念。
JavaScript代码
    -   
 
    -      (function () {  
 
    -                if(!String.prototype.trim){  
 
    -                    String.prototype.trim = function(str) {  
 
    -                        return this.replace(/^[\s\xa0]+|[\s\xa0]+$/g, '');  
 
    -                    }  
 
    -                }  
 
    -                var dom = {  
 
    -                    quote: function (str) {  
 
    -                        str = str.replace(/[\x00-\x1f\\]/g, function (chr) {  
 
    -                            var special = metaObject[chr];  
 
    -                            return special ? special : '\\u' + ('0000' + chr.charCodeAt(0).toString(16)).slice(-4)  
 
    -                        });  
 
    -                        return '"' + str.replace(/"/g, '\\"') + '"';  
 
    -                    }  
 
    -                },  
 
    -                metaObject = {  
 
    -                    '\b': '\\b',  
 
    -                    '\t': '\\t',  
 
    -                    '\n': '\\n',  
 
    -                    '\f': '\\f',  
 
    -                    '\r': '\\r',  
 
    -                    '\\': '\\\\' 
 
    -                }, 
 
    -                parser = document.createElement("div"), 
 
    -                startOfHTML = "\t__views.push(", 
 
    -                endOfHTML = ");\n"; 
 
    -            
 
    -                //onsite,可选,Boolean,是否就地替换掉模板容器,默认true,如果为false,则返回一个文档碎片,交由用户自己插入到需要的地方 
 
    -                dom.ejs = function (obj) { 
 
    -                    var onsite = obj.onsite === void 0 , 
 
    -                    left = obj.left || "<%", 
 
    -                    right =obj.right || "%>", 
 
    -                    selector = obj.selector, 
 
    -                    isLeft = true, 
 
    -                    buff = ["var __views = [];\n"], 
 
    -                    fragment = document.createDocumentFragment(), 
 
    -                    el = document.getElementById(selector), 
 
    -                    ejs = dom.ejs; 
 
    -                    if (!el) throw "找不到目标元素"; 
 
    -                    var str = el.text.trim(); 
 
    -                    if(!ejs[selector]){ 
 
    -                        while(str.length){ 
 
    -                            var condition = isLeft ? left :right; 
 
    -                            var index = str.indexOf(condition); 
 
    -                            if(index !== -1){//取左边 
 
    -                                var text = str.slice(0,index); 
 
    -                                if(isLeft){ 
 
    -                                    buff.push(startOfHTML, dom.quote(text.trim()), endOfHTML); 
 
    -                                }else{ 
 
    -                                    switch (text.charAt(0)) { 
 
    -                                        case "#"://处理注释 
 
    -                                            break; 
 
    -                                        case "="://处理后台返回的变量(输出到页面的); 
 
    -                                            buff.push(startOfHTML, text.slice(1), endOfHTML) 
 
    -                                            break; 
 
    -                                        default: 
 
    -                                            buff.push(text, "\n") 
 
    -                                    }; 
 
    -                                } 
 
    -                            }else{ 
 
    -                                if(isLeft){ 
 
    -                                    buff.push(startOfHTML, dom.quote(str), endOfHTML); 
 
    -                                    break; 
 
    -                                }else{ 
 
    -                                    throw "在字符串{{ "+dom.quote(str)+" }}中找不到右界定符"+right 
 
    -                                } 
 
    -                            } 
 
    -                            str = str.slice(index+2).trim(); 
 
    -                            isLeft = !isLeft; 
 
    -                        } 
 
    -                        ejs[selector] = new Function("json", "with(json){"+buff.join("") + '};return __views.join("");')  
 
    -                    }  
 
    -                    parser.innerHTML = ejs[selector](obj.json || {});  
 
    -                    while (parser.firstChild) {  
 
    -                        fragment.appendChild(parser.firstChild)  
 
    -                    }  
 
    -                    return onsite ? el.parentNode.replaceChild(fragment, el) : fragment;  
 
    -                };  
 
    -                window.dom = dom;  
 
    -   
 
    -            })();  
 
 
这种使用原生代码写的例子,可以被任何代码所使用,如果你有兴趣也可以看看司徒正美的例子的。原文网址在javascript 模板系统 ejs v2,可以移步一观。
 
Tags: jquery, template, 模版, 模板
Javascript | 评论:0
 | 阅读:21076
Submitted by gouki on 2010, August 21, 9:37 PM
本文写的很乱,已经是想到什么写什么了。所以无可读性,纯属自己的记录和想法
不管是在生活中也好,工作中也好,其实都会有自己的短板,只有了解自己的短板才能扬长避短,以便更好发挥自己的特长 。如果尽让别人注意你的短板,而一直忽略了你的长板,那你在工作中也就会处处受阻无法正常发挥自己的能力。
什么是你的短板?交流?心态?算法?数据结构?数据库?又或者是其他?好好的了解,对自己的职业生涯也有好处。抛开技术因素,可能更多的就是心理因素了。
得明白自己想要的东西,才能真正获得自己想要的东西。看了一下Fenng写的去大公司还是去小公司工作?,就是说了那种迷惘的心态。
去大公司还是去小公司,自己究竟是想干什么 ,为了钱,还是为了技术?
所以我现在明白了自己想要做什么 ,才会想到写这个博客。算是做一个纪录罢
 
Tags: 短板
Misc | 评论:3
 | 阅读:18667
Submitted by gouki on 2010, August 20, 10:33 PM
discuz的ajaxpost功能有点强大,但缺点也很明显,如果ajaxpost提交一个FORM,那么返回的时候只能显示showmessage的内容,而不会主动跳转,因此这里就有一个小技巧 了。。
比如默认submit按钮这样操作:onclick="ajaxpost('formid')";之类的,我们可以先这样。。
onclick="$('__formid').innerText='';ajaxpost('formid');checkPostResult();";
含义其实很简单,先把ajaxpost提示信息所在的div内容清空。然后提交。最后,根据返回值来判断。。
JavaScript代码
    - function checkPostResult(){  
 
    -     var cid = setInterval(function(){  
 
    -         if( $('__formid').innerText == 'success'){  
 
    -                 alert('提交成功');  
 
    -                 location.href='xxxxx.php';  
 
    -                 clearInterval(cid);  
 
    -         }  
 
    -     },1000);  
 
    - }  
 
 
这个处理也很简单,为什么是用setInterval和clearInterval,主要是由于ajax是异步操作,如果不用setInterval方法 ,那么在ajaxpost结束的时候,其实提示信息还没有append到提示信息所在的ID里,所以用setInterval方法先延迟然后循环处理最后再结束提示。。。
clearInterval用的不太对,但短时间内想不到更好的。先这样临时解决喽。
 
Tags: discuz, uchome, tips
PHP | 评论:0
 | 阅读:17958