<?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; Ajax</title>
	<atom:link href="http://blog.11034.org/tag/ajax/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>小心使用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编码的那些事儿</title>
		<link>http://blog.11034.org/2011-03/java_encoding.html</link>
		<comments>http://blog.11034.org/2011-03/java_encoding.html#comments</comments>
		<pubDate>Tue, 29 Mar 2011 13:15:20 +0000</pubDate>
		<dc:creator><![CDATA[-Flyぁ梦-]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[编码]]></category>

		<guid isPermaLink="false">http://blog.stariy.org/?p=824</guid>
		<description><![CDATA[来上海百度实习也才没多久，这是第三个礼拜吧，接手的项目相当紧迫，而且作为一个实习生我是main coder，不 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>来上海百度实习也才没多久，这是第三个礼拜吧，接手的项目相当紧迫，而且作为一个实习生我是main coder，不由地带动了极大的工作积极性。这个一开始认为很简单很明了的“小”项目，没想到让我学到了很多东西，今天就讲讲关于Java编码的那些事儿。</p>
<p><span id="more-824"></span></p>
<h3>Java编码</h3>
<p>Unicode是全球标准字符集，是Java所为String采用的编码方式，任何字符用2个字节表示。String实例中保存有一个char[]字符数组。string.getByte()方法可以获得到这个字符串实例在指定编码下的字节数组，<strong>注意</strong>的是不带参数的getByte方法使用OS默认的字符集，比如GB2312（简体中文）。所以要得到Unicode下的字节数组，需要这样：string.getBytes(&#8220;unicode&#8221;)（<strong>此处注意见下文</strong>）。如果使用new String(byte[], Charset)构造，可以将已知编码的字节数组重新拼成一个String实例，即用指定的Charset去组合字节为Unicode字符罢了。同理，不带Charset的String构造使用OS默认字符集。</p>
<p>因此，得到UTF-8的字节数组，按以下步骤：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #003399;">String</span> str <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;梦&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> bytes <span style="color: #339933;">=</span> str.<span style="color: #006633;">getBytes</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;UTF-8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   <span style="color: #0000ff;">&quot;使用UTF-8解码字符串得到的UTF-8字节数组&quot;</span>
<span style="color: #003399;">String</span> str2 <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">String</span><span style="color: #009900;">&#40;</span>bytes, <span style="color: #0000ff;">&quot;utf8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #0000ff;">&quot;按照当初被解码的方式（utf8）重新组成Java String类&quot;</span>
str.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span>str2<span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>       <span style="color: #0000ff;">&quot;使用大小写不同的编码写法，来区别不同API中参数代表的意义&quot;</span></pre></td></tr></table></div>

<p>所以，str = new String(str.getBytes(Charset), Charset) 什么都没有做，除了新建了个String对象。</p>
<p>但是如果你要获取unicode的字节数组，却有非常多的选择，而且很容易出错。</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">void</span> echoBytesTest<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #003399;">String</span> s <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;梦&quot;</span><span style="color: #339933;">;</span>
	echoBytes<span style="color: #009900;">&#40;</span>s, <span style="color: #0000ff;">&quot;Unicode&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	echoBytes<span style="color: #009900;">&#40;</span>s, <span style="color: #0000ff;">&quot;UnicodeBig&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	echoBytes<span style="color: #009900;">&#40;</span>s, <span style="color: #0000ff;">&quot;UnicodeLittle&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	echoBytes<span style="color: #009900;">&#40;</span>s, <span style="color: #0000ff;">&quot;UnicodeBigUnmarked&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	echoBytes<span style="color: #009900;">&#40;</span>s, <span style="color: #0000ff;">&quot;UnicodeLittleUnmarked&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	echoBytes<span style="color: #009900;">&#40;</span>s, <span style="color: #0000ff;">&quot;UTF-16&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	echoBytes<span style="color: #009900;">&#40;</span>s, <span style="color: #0000ff;">&quot;UTF-16BE&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	echoBytes<span style="color: #009900;">&#40;</span>s, <span style="color: #0000ff;">&quot;UTF-16LE&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	echoBytes<span style="color: #009900;">&#40;</span>s, <span style="color: #0000ff;">&quot;UTF-8&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">void</span> echoBytes<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> s, <span style="color: #003399;">String</span> encoding<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> bytes <span style="color: #339933;">=</span> s.<span style="color: #006633;">getBytes</span><span style="color: #009900;">&#40;</span>encoding<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span> b <span style="color: #339933;">:</span> bytes<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> b <span style="color: #339933;">&amp;</span> 0xff<span style="color: #339933;">;</span>
		<span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">print</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Integer</span>.<span style="color: #006633;">toHexString</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</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><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>JDK6.0环境下的输出结果如下所示：</p>
<table>
<tbody>
<tr>
<td>Unicode</td>
<td><font color="red">fe ff</font> 68 a6</td>
<td>BE顺序，带BOM</td>
<td>强烈申明不要使用，<strong>JDK相关</strong></td>
</tr>
<tr>
<td>UnicodeBig</td>
<td><font color="red">fe ff</font> 68 a6</td>
<td>BE顺序，带BOM</td>
<td><font color="blue">推荐使用</font></td>
</tr>
<tr>
<td>UnicodeLittle</td>
<td><font color="red">ff fe</font> a6 68</td>
<td>LE顺序，带BOM</td>
<td><font color="blue">推荐使用</font></td>
</tr>
<tr>
<td>UnicodeBigUnmarked</td>
<td>68 a6</td>
<td>BE顺序，无BOM</td>
<td><font color="blue">推荐使用</font></td>
</tr>
<tr>
<td>UnicodeLittleUnmarked</td>
<td>a6 68</td>
<td>LE顺序，无BOM</td>
<td><font color="blue">推荐使用</font></td>
</tr>
<tr>
<td>UTF-16</td>
<td><font color="red">fe ff</font> 68 a6</td>
<td>BE顺序，带BOM</td>
<td>不推荐使用，可读性不够高</td>
</tr>
<tr>
<td>UTF-16BE</td>
<td>68 a6</td>
<td>BE顺序，无BOM</td>
<td>不推荐使用，可读性不够高</td>
</tr>
<tr>
<td>UTF-16LE</td>
<td>a6 68</td>
<td>LE顺序，无BOM</td>
<td>不推荐使用，可读性不够高</td>
</tr>
<tr>
<td>UTF-8</td>
<td>e6 a2 a6</td>
<td>无BOM</td>
<td>此为UTF-8字节串，特以此区别</td>
</tr>
</tbody>
</table>
<p><strong>然后要特别说明的是，getBytes(&#8220;Unicode&#8221;)这种方式是什么样的结果，却是与JDK相关的</strong>，JDK5.0使用LE顺序，JDK6.0使用BE顺序！</p>
<p>有点复杂，看官方解释。</p>
<blockquote><p>
为了在读取字节时能知道所采用的字节序，在传输时采用了一个名为 “Zero Width No-Break Space” 的字符（中文译名作“零宽无间断间隔”）用于限定字节序，开头两个字节为 FE FF（即-2 -1） 时为 Big-Endian，为 FF FE（即-1 -2） 时为 Little-Endian。 详见 RFC2781 3.2 节。这个就是传说中的BOM头。<br />
UTF-8不需要 BOM 来表明字节顺序，但可以用 BOM 来表明编码方式。字符 &#8220;Zero Width No-Break Space&#8221; 的 UTF-8 编码是 EF BB BF。<br />
详见：<a href="http://baike.baidu.com/view/126558.htm#sub5073178" target="_blank">BOM_百度百科</a>
</p></blockquote>
<p>自我理解很像体系结构中的大端编址和小端编址对吧。不知道Unicode为什么要存在Big-Endian和Little-Endian两种顺序，反正就是存在着呗。</p>
<h3>说说项目</h3>
<p>就是因为string.getBytes(&#8220;Unicode&#8221;)的JDK相关性，然后我因为使用了旧版本的JDK导致和大家同样从SVN签出的代码的运行结果却完全不一致，由于完全信任Java的平台无关，没有一点怀疑是JDK源码的原因，整整花了一天的时候排查bug。</p>
<p>第二个是Spring MVC的@ResponseBody默认返回的字符集是ISO-8859-1的西文字符，导致返回客户端为乱码，修改Spring配置的见<a href="http://forum.springsource.org/showthread.php?t=81858" target="_blank">Spring官方论坛的解决方案</a>，不过貌似试了几种方法都没有起效&#8230;其实最简单的方式就是放弃使用Spring提供的Ajax方式，直接使用HttpServletResponse的getWriter().write()方法写字符串或getOutputStream.write()方法直接写字节。</p>
<h3>参考引用</h3>
<p>百度百科：<a href="http://baike.baidu.com/view/126558.htm#sub5073178">http://baike.baidu.com/view/126558.htm#sub5073178</a></p>
<p>CSDN论坛：<a href="http://topic.csdn.net/u/20081009/09/e899898c-591f-4985-ae88-5972475708fb.html" target="_blank">http://topic.csdn.net/u/20081009/09/e899898c-591f-4985-ae88-5972475708fb.html</a></p>
<p>Spring官方论坛：<a href="http://forum.springsource.org/showthread.php?t=81858">http://forum.springsource.org/showthread.php?t=81858</a></p>
<h4  class="related_post_title">看看 Ajax , Spring , 编码</h4><ul class="related_post"><li>2016-03-22 -- <a target="_blank" href="http://blog.11034.org/2016-03/spring_mvc_applicationcontext.html" title="Spring-MVC中的一些问题">Spring-MVC中的一些问题</a></li><li>2014-06-17 -- <a target="_blank" href="http://blog.11034.org/2014-06/onchange_of_input.html" title="小心使用input的onchange事件">小心使用input的onchange事件</a></li><li>2013-08-10 -- <a target="_blank" href="http://blog.11034.org/2013-08/some_skills_in_java.html" title="学到的一些东西">学到的一些东西</a></li><li>2012-05-13 -- <a target="_blank" href="http://blog.11034.org/2012-05/java_play_framework.html" title="Java Play framework">Java Play framework</a></li><li>2011-03-15 -- <a target="_blank" href="http://blog.11034.org/2011-03/spring_hibernate_annotation.html" title="SpringMVC+Hibernate的一些配置">SpringMVC+Hibernate的一些配置</a></li></ul><h4 class="related_post_title">看看 Java </h4><ul class="related_post"><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><li>2016-06-21 -- <a target="_blank" href="http://blog.11034.org/2016-06/semaphore.html" title="Semaphore简单分析">Semaphore简单分析</a></li>]]></content:encoded>
			<wfw:commentRss>http://blog.11034.org/2011-03/java_encoding.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
