项目小经验: eval与回车符

      今天遇到一个让我一开始无从下手的问题, 页面form中有一个名为备注的textarea, 这里边可以有换行,也就有了回车符.这个form提交到DB后再以ajax的方式从DB中取出备注的信息, 在jsp页面中用javascript里的eval转换成JavaScript的对象时出问题了,那个回车符在eval里捣乱了!


    怎么办? 不让用户在备注里换行就没有了回车符,但业务要求应该可以换行的.

    首先想到了encode,但怎么与javascript里的eval整合? 对这个encode究竟怎么用也不熟悉.


    也想到了javascript里的escape/unescape,但这个escape是把那些特殊符号换成"%"形式的值? 就是换成了在eval里又会不会给eval有影响?试了试, 出错了, 也不知道为什么没有报错信息,是因为在ajax的回调函数里执行的原因? 但这也不应该对eval或escape的执行有影响的.


    是不是eval的过? 想到了json里的JSON.parse()方法,那样的话得引入一个json框架,仅仅为了这么点小事,有些过了吧?顺便也记下来,看http: //www.json.org/js.html里的描述时,有这么一句话:var myObject = eval('(' + myJSONtext + ')'); 这个eval什么时候加" '(' ",什么时候又不用加? 以前的项目中都加的,而现在项目又不加了, 这加与不加有什么本质的区别?

    ..................

    后来边搜边试,想用很笨的方法, 把ajax返回的字符串在eval前把里面的回车符("\r\n" 或"\n")替换成一个特殊的字符--比如说@, 再在真正赋值时再把这个替换来的@换成"\r\n"或"\n". (顺便再问下"\r\n"与"\n"有什么区别? 隐约记得"\r\n"是Unix下的换行而"\r\n"是windows下的换行,真的是这样吗? http://javaeye-mao.iteye.com/blog/211354里有这较为详细的描述,http: //bytes.com/topic/net/answers/613564-difference-between-carriage-return-r -new-line-n这里边也些讨论.)

    但在具体实施里又有了问题, 由于在试这种方案前想着用escape来着, 这样jsp文件里有试escape时离下的痕迹. 但违反了"谋定而行,行且坚毅"的原则,没有把escape清除掉.这样在试"替换"方案里有了干扰.再一次验证了"谋定而行,行且坚毅"的重要性.


    清除escape的干扰后,在把@再次替换成回车符时有了麻烦事, 我用这样的方式: content.replace(/@/g,"\r\n"), 不行,"\r\n"在textarea里原样显示.换成"\\r\\n",还是不行,原样显示.来点狠的,再加一个"\",即"\\\r\\\n",起作 用换行了,但在textarea里显示效果是多了一个"\". 呵!! 你真狠! 用两个"\\"时不起作用, 用三个时又过了,总不能让我用2.5个"\"吧??? 这怎么办? 强忍着"疼痛",近似绝望地试了试"\\n",嘿,成了!!

    姑且不管为什么, 能用了就行.
    
    于是往配置库里checkin了刚改的jsp文件.

你可能感兴趣的:(JavaScript,json,Ajax,jsp,unix)