<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>-Flyぁ梦- &#187; Javascript</title>
	<atom:link href="http://blog.11034.org/category/coding/javascript/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.11034.org</link>
	<description></description>
	<lastBuildDate>Sun, 22 Jun 2025 08:59:05 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.38</generator>
	<item>
		<title>JSON中出现解析错误的原因之一：不可打印字符</title>
		<link>http://blog.11034.org/2015-04/json_ascii.html</link>
		<comments>http://blog.11034.org/2015-04/json_ascii.html#comments</comments>
		<pubDate>Thu, 09 Apr 2015 08:59:36 +0000</pubDate>
		<dc:creator><![CDATA[-Flyぁ梦-]]></dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[json]]></category>

		<guid isPermaLink="false">http://blog.11034.org/?p=2407</guid>
		<description><![CDATA[JSON规范规定，字符串需要用Unicode传输，而对于ASCII码中的前32个不可打印字符（第33个字符为空 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>JSON规范规定，字符串需要用Unicode传输，而对于ASCII码中的前32个不可打印字符（第33个字符为空格）应该转化为明文的转义模式，比如换行符0A：&#8221;\n&#8221;，出现在json中就应该是明文的\n，所以内部表示就应该是&#8221;\\n&#8221;。</p>
<p>所以假如一个json字符串中出现了01-1F这31个字符（00空字符倒是不会出现错误），json就会解析错误。</p>
<p><span id="more-2407"></span></p>
<p>Ruby on Rails中的to_json方法，默认并没有将这31个字符给正确转义为json格式，会引起错误。</p>
<p>用Rails的console举例：</p>
<div id="attachment_2408" style="width: 495px" class="wp-caption aligncenter"><img class="size-full wp-image-2408" alt="ASCII码转json测试" src="http://blog.11034.org/wp-content/uploads/2015/04/asc.png" width="485" height="268" /><p class="wp-caption-text">ASCII码转json测试</p></div>
<p>所以可能要手动去删除1-31号不可显示的ASCII码，除了\n\r\t之外，一般来说这些字符对于内容显示上不存在作用。</p>
<p>补充一点，ASCII表的最后一个字符127位为DEL (delete)，虽然可能也算不可打印字符，不过这个字符不会引起json解析错误。</p>
<p>附上ASCii码表：<a href="http://www.asciima.com/">http://www.asciima.com/</a></p>
<p>一种解决办法：对to_json解析后的字符串进行字符过滤</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="ruby" style="font-family:monospace;">    <span style="color:#9966CC; font-weight:bold;">def</span> to_json<span style="color:#006600; font-weight:bold;">&#40;</span>options = <span style="color:#0000FF; font-weight:bold;">nil</span><span style="color:#006600; font-weight:bold;">&#41;</span>
        json_str = <span style="color:#0066ff; font-weight:bold;">@data</span>.<span style="color:#9900CC;">to_json</span><span style="color:#006600; font-weight:bold;">&#40;</span>options<span style="color:#006600; font-weight:bold;">&#41;</span>
        bytes = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
        json_str.<span style="color:#9900CC;">each_byte</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>c<span style="color:#006600; font-weight:bold;">|</span>
            <span style="color:#9966CC; font-weight:bold;">next</span> <span style="color:#9966CC; font-weight:bold;">if</span> c <span style="color:#006600; font-weight:bold;">&gt;</span>= <span style="color:#006666;">1</span> <span style="color:#006600; font-weight:bold;">&amp;&amp;</span> c <span style="color:#006600; font-weight:bold;">&lt;</span>= <span style="color:#006666;">31</span>
            bytes <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> c
        <span style="color:#9966CC; font-weight:bold;">end</span>
        <span style="color:#0000FF; font-weight:bold;">return</span> bytes.<span style="color:#9900CC;">pack</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'C*'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<h4  class="related_post_title">随便看一看</h4><ul class="related_post"><li>2015-10-08 -- <a target="_blank" href="http://blog.11034.org/2015-10/taiwan2.html" title="我在台湾的感受">我在台湾的感受</a></li><li>2010-05-15 -- <a target="_blank" href="http://blog.11034.org/2010-05/interview_of_ebay.html" title="eBay实习笔试&#038;面试">eBay实习笔试&#038;面试</a></li><li>2011-02-14 -- <a target="_blank" href="http://blog.11034.org/2011-02/throw_away_auto_widget.html" title="抛弃边栏widget的自动显示">抛弃边栏widget的自动显示</a></li><li>2012-04-04 -- <a target="_blank" href="http://blog.11034.org/2012-04/ningbo_travel.html" title="说好的宁波">说好的宁波</a></li><li>2018-06-09 -- <a target="_blank" href="http://blog.11034.org/2018-06/bed.html" title="选择床和床垫的一些经验">选择床和床垫的一些经验</a></li></ul><h4 class="related_post_title">看看 Javascript , ruby on rails </h4><ul class="related_post"><li>2015-08-12 -- <a target="_blank" href="http://blog.11034.org/2015-08/rails_nginx.html" title="Liunx下搭建Rails和Nginx环境">Liunx下搭建Rails和Nginx环境</a></li><li>2014-12-21 -- <a target="_blank" href="http://blog.11034.org/2014-12/ruby_encoding.html" title="Ruby字符串的编码">Ruby字符串的编码</a></li><li>2014-10-25 -- <a target="_blank" href="http://blog.11034.org/2014-10/linux_timeout.html" title="linux的timeout处理wkhtmltopdf进程超时">linux的timeout处理wkhtmltopdf进程超时</a></li><li>2014-10-04 -- <a target="_blank" href="http://blog.11034.org/2014-10/rails-has_many.html" title="Rails中has_many等的原理">Rails中has_many等的原理</a></li><li>2014-07-28 -- <a target="_blank" href="http://blog.11034.org/2014-07/active_support_235.html" title="简析Rails：active_support 2.3.5">简析Rails：active_support 2.3.5</a></li>]]></content:encoded>
			<wfw:commentRss>http://blog.11034.org/2015-04/json_ascii.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>小心使用input的onchange事件</title>
		<link>http://blog.11034.org/2014-06/onchange_of_input.html</link>
		<comments>http://blog.11034.org/2014-06/onchange_of_input.html#comments</comments>
		<pubDate>Tue, 17 Jun 2014 06:57:06 +0000</pubDate>
		<dc:creator><![CDATA[-Flyぁ梦-]]></dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[事件]]></category>

		<guid isPermaLink="false">http://blog.11034.org/?p=2247</guid>
		<description><![CDATA[入职两个月了，做了2个项目，都用到了这个功能：在input中输入进行搜索，每次修改（键盘敲击）都会进行一次搜索 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>入职两个月了，做了2个项目，都用到了这个功能：在input中输入进行搜索，每次修改（键盘敲击）都会进行一次搜索结果返回，然后对返回的结果数据进行一些js和ajax的操作。</p>
<p><span id="more-2247"></span></p>
<p>第一次做的时候，先尝试了input的onchange事件，发现只有在焦点脱离之后才会发生，然后换到了onkeyup事件，解决了需求，遗留问题就是把这两个事件都给保留了，导致了下面问题的发生。</p>
<p>当在input里敲击键盘不断加载数据时（用jQuery.load加载的片段页面），页面中有绑定了onclick事件的&lt;a&gt;标签，但是鼠标第一次点击&lt;a&gt;标签死活不响应onclick事件，要第二次点击才响应，很诡异。 一直想不到是什么原因，换了绑定事件的各种方法也不起作用。[em85]</p>
<p>这个问题一直存在但是无法修复隔了差不多有一个月之久！在偶然的因素下，意识到第一次点击的时候又触发了数据加载刷新了片段页面！于是很快就联想到这是onchange事件在响应！第一次点击就这么被onchange事件吃掉了！ <img src="http://blog.11034.org/wp-includes/images/smilies/icon_twisted.gif" alt=":twisted:" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 删除了onchange事件，于是问题迎刃而解。</p>
<p>这样想来，如果input绑定了onchange事件，很可能因此影响到页面中其他元素的事件，且用且珍惜啊！</p>
<h4  class="related_post_title">看看 Ajax , 事件</h4><ul class="related_post"><li>2011-03-29 -- <a target="_blank" href="http://blog.11034.org/2011-03/java_encoding.html" title="Java编码的那些事儿">Java编码的那些事儿</a></li></ul><h4 class="related_post_title">看看 Javascript </h4><ul class="related_post"><li>2015-04-09 -- <a target="_blank" href="http://blog.11034.org/2015-04/json_ascii.html" title="JSON中出现解析错误的原因之一：不可打印字符">JSON中出现解析错误的原因之一：不可打印字符</a></li><li>2010-12-24 -- <a target="_blank" href="http://blog.11034.org/2010-12/java_scriptengine.html" title="Java用ScriptEngine解析脚本">Java用ScriptEngine解析脚本</a></li><li>2010-06-08 -- <a target="_blank" href="http://blog.11034.org/2010-06/javaee_webim.html" title="J2EE大程，WebIM系统">J2EE大程，WebIM系统</a></li>]]></content:encoded>
			<wfw:commentRss>http://blog.11034.org/2014-06/onchange_of_input.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Java用ScriptEngine解析脚本</title>
		<link>http://blog.11034.org/2010-12/java_scriptengine.html</link>
		<comments>http://blog.11034.org/2010-12/java_scriptengine.html#comments</comments>
		<pubDate>Fri, 24 Dec 2010 14:42:33 +0000</pubDate>
		<dc:creator><![CDATA[-Flyぁ梦-]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[百度]]></category>
		<category><![CDATA[脚本]]></category>

		<guid isPermaLink="false">http://blog.stariy.org/?p=738</guid>
		<description><![CDATA[实习第一期的任务基本做完，从python和django的世界又回到了Java，当初来刚来百度的时候怎么也没想到 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>实习第一期的任务基本做完，从python和django的世界又回到了Java，当初来刚来百度的时候怎么也没想到居然还会用上Java。新的任务也很简单，不过正好学习了Java一个新的script包，可以用来解析脚本语法。</p>
<p>javax.script，始于JDK1.6，不过现在只有sun实现的javascript的解析器，难道是因为主要用来解析js语法所以归类到JEE的范畴？不过基本足够了，一般的用途主要是能解析通用的表达式就好，比如X &gt;= 1<span id="more-738"></span>（X作为参数传入）这样的表达式，也能利用js的函数语法，创造一个就像java的函数一样存在于内存中随时可以被调用的函数，更可以将js中的对象直接转换成java对象。</p>
<p>script包下最主要的是ScriptEngineManager、ScriptEngine、CompiledScript和Bindings 4个类或接口。</p>
<p>ScriptEngineManager是一个工厂的集合，可以通过name或tag的方式获取某个脚本的工厂并生成一个此脚本的ScriptEngine，目前只有javascript的工厂。通过工厂函数得到了ScriptEngine之后，就可以用这个对象来解析脚本字符串了，直接调用Object obj = ScriptEngine.eval(String script)即可，返回的obj为表达式的值，比如true、false或int值。</p>
<p>CompiledScript可以将ScriptEngine解析一段脚本的结果存起来，方便多次调用。只要将ScriptEngine用Compilable接口强制转换后，调用compile(String script)就返回了一个CompiledScript对象，要用的时候每次调用一下CompiledScript.eval()即可，一般适合用于js函数的使用。</p>
<p>Bindings的概念算稍微复杂点，我的理解Bindings是用来存放数据的容器。它有3个层级，为Global级、Engine级和Local级，前2者通过ScriptEngine.getBindings()获得，是唯一的对象，而Local Binding由ScriptEngine.createBindings()获得，很好理解，每次都产生一个新的。Global对应到工厂，Engine对应到ScriptEngine，向这2者里面加入任何数据或者编译后的脚本执行对象，在每一份新生成的Local Binding里面都会存在。</p>
<p>给个代码的例子，其中的functionScript可以从标准输入stdin或者配置文件等地方获得，这样就可以动态的控制Java代码的运行结果</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
	ScriptEngine engine <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ScriptEngineManager<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getEngineByName</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;javascript&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	Compilable compilable <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>Compilable<span style="color: #009900;">&#41;</span> engine<span style="color: #339933;">;</span>
	Bindings bindings <span style="color: #339933;">=</span> engine.<span style="color: #006633;">createBindings</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//Local级别的Binding</span>
	<span style="color: #003399;">String</span> script <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;function add(op1,op2){return op1+op2} add(a, b)&quot;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//定义函数并调用</span>
	CompiledScript JSFunction <span style="color: #339933;">=</span> compilable.<span style="color: #006633;">compile</span><span style="color: #009900;">&#40;</span>script<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//解析编译脚本函数</span>
	bindings.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;a&quot;</span>, <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>bindings.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;b&quot;</span>, <span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//通过Bindings加入参数</span>
	<span style="color: #003399;">Object</span> result <span style="color: #339933;">=</span> JSFunction.<span style="color: #006633;">eval</span><span style="color: #009900;">&#40;</span>bindings<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>result<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//调用缓存着的脚本函数对象，Bindings作为参数容器传入</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span>ScriptException e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>另外还有一个ScriptContext的概念，这个可能很少用到吧，它是用来连接ScriptEngine和Bindings的工具。按照JDK的解释：该接口的实现类被用来连接ScriptEngine和宿主应用程序中的对象（如有范围的Bindings）。</p>
<h4  class="related_post_title">随便看一看</h4><ul class="related_post"><li>2012-09-11 -- <a target="_blank" href="http://blog.11034.org/2012-09/shendiao_xialv.html" title="读神雕侠侣">读神雕侠侣</a></li><li>2012-11-25 -- <a target="_blank" href="http://blog.11034.org/2012-11/photos.html" title="玉泉、白堤、北山路">玉泉、白堤、北山路</a></li><li>2013-05-15 -- <a target="_blank" href="http://blog.11034.org/2013-05/fan_error.html" title="小黑风扇坏两天，被逼看完一本书">小黑风扇坏两天，被逼看完一本书</a></li><li>2010-12-16 -- <a target="_blank" href="http://blog.11034.org/2010-12/wp-sns-share_update_to_1-4.html" title="wp-sns-share更新至1.4">wp-sns-share更新至1.4</a></li><li>2010-08-22 -- <a target="_blank" href="http://blog.11034.org/2010-08/email_reply_in_wordpress.html" title="wordpress评论模块：邮件回复评论">wordpress评论模块：邮件回复评论</a></li></ul><h4 class="related_post_title">看看 Java , Javascript , 百度 </h4><ul class="related_post"><li>2010-11-27 -- <a target="_blank" href="http://blog.11034.org/2010-11/image_resize_in_java_and_python.html" title="Python和Java处理图片缩放，C#友情支持">Python和Java处理图片缩放，C#友情支持</a></li><li>2010-06-08 -- <a target="_blank" href="http://blog.11034.org/2010-06/javaee_webim.html" title="J2EE大程，WebIM系统">J2EE大程，WebIM系统</a></li><li>2016-09-09 -- <a target="_blank" href="http://blog.11034.org/2016-09/64bits_linux_arena_memory.html" title="64位Linux下Java进程堆外内存迷之64M问题">64位Linux下Java进程堆外内存迷之64M问题</a></li><li>2016-08-18 -- <a target="_blank" href="http://blog.11034.org/2016-08/java_concurrency_in_practice.html" title="读java concurrency in practice">读java concurrency in practice</a></li><li>2016-08-05 -- <a target="_blank" href="http://blog.11034.org/2016-08/thread_stop.html" title="线程清理">线程清理</a></li>]]></content:encoded>
			<wfw:commentRss>http://blog.11034.org/2010-12/java_scriptengine.html/feed</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>J2EE大程，WebIM系统</title>
		<link>http://blog.11034.org/2010-06/javaee_webim.html</link>
		<comments>http://blog.11034.org/2010-06/javaee_webim.html#comments</comments>
		<pubDate>Tue, 08 Jun 2010 11:49:26 +0000</pubDate>
		<dc:creator><![CDATA[-Flyぁ梦-]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[comet]]></category>

		<guid isPermaLink="false">http://blog.stariy.info/?p=97</guid>
		<description><![CDATA[大程做完啦，很开心，这个大程让我学了不少东西，基于HTTP长连接的comet思想的cometd框架，很好很强大 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>大程做完啦，很开心，这个大程让我学了不少东西，基于HTTP长连接的comet思想的cometd框架，很好很强大！</p>
<p><span id="more-97"></span>不多说，上图，嘿嘿</p>
<p>登陆页面：</p>
<p><img class="alignnone size-full wp-image-108" title="登录" src="/wp-content/uploads/2010/06/11-e1275998391183.png" alt="" width="600" height="344" /></p>
<p>注册页面：</p>
<p><img class="alignnone size-full wp-image-109" title="注册页面" src="/wp-content/uploads/2010/06/21-e1275998494883.png" alt="" width="600" height="351" /></p>
<p>最后是主页：</p>
<p><img class="alignnone size-full wp-image-110" title="聊天主页" src="/wp-content/uploads/2010/06/31-e1275998552704.png" alt="" width="600" height="465" /></p>
<p>很爽的一件事是从网上找的facebook的提示框被很方便的使用在了系统中，淫淫网可以抄，我为嘛不可以？哈哈</p>
<p><img class="alignnone size-full wp-image-111" title="4" src="/wp-content/uploads/2010/06/41-e1275998591756.png" alt="" width="600" height="375" /></p>
<h4  class="related_post_title">随便看一看</h4><ul class="related_post"><li>2012-07-03 -- <a target="_blank" href="http://blog.11034.org/2012-07/trie_in_php.html" title="敏感词过滤，PHP实现的Trie树">敏感词过滤，PHP实现的Trie树</a></li><li>2011-06-13 -- <a target="_blank" href="http://blog.11034.org/2011-06/graduation_design.html" title="毕业设计答辩">毕业设计答辩</a></li><li>2011-03-29 -- <a target="_blank" href="http://blog.11034.org/2011-03/java_encoding.html" title="Java编码的那些事儿">Java编码的那些事儿</a></li><li>2016-06-21 -- <a target="_blank" href="http://blog.11034.org/2016-06/semaphore.html" title="Semaphore简单分析">Semaphore简单分析</a></li><li>2017-10-29 -- <a target="_blank" href="http://blog.11034.org/2017-10/guangzhou_macau.html" title="2017国庆超级假期广州澳门游">2017国庆超级假期广州澳门游</a></li></ul><h4 class="related_post_title">看看 Java , Javascript </h4><ul class="related_post"><li>2010-12-24 -- <a target="_blank" href="http://blog.11034.org/2010-12/java_scriptengine.html" title="Java用ScriptEngine解析脚本">Java用ScriptEngine解析脚本</a></li><li>2016-09-09 -- <a target="_blank" href="http://blog.11034.org/2016-09/64bits_linux_arena_memory.html" title="64位Linux下Java进程堆外内存迷之64M问题">64位Linux下Java进程堆外内存迷之64M问题</a></li><li>2016-08-18 -- <a target="_blank" href="http://blog.11034.org/2016-08/java_concurrency_in_practice.html" title="读java concurrency in practice">读java concurrency in practice</a></li><li>2016-08-05 -- <a target="_blank" href="http://blog.11034.org/2016-08/thread_stop.html" title="线程清理">线程清理</a></li><li>2016-06-21 -- <a target="_blank" href="http://blog.11034.org/2016-06/futuretask.html" title="FutureTask简单分析和用法">FutureTask简单分析和用法</a></li>]]></content:encoded>
			<wfw:commentRss>http://blog.11034.org/2010-06/javaee_webim.html/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
	</channel>
</rss>
