<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.0.4" -->
<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/"
	>

<channel>
	<title>解惑</title>
	<link>http://www.jiehoo.com</link>
	<description>解己之惑，解人之惑</description>
	<pubDate>Wed, 30 Apr 2008 05:03:02 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.4</generator>
	<language>en</language>
			<item>
		<title>JSR168</title>
		<link>http://www.jiehoo.com/jsr168.htm</link>
		<comments>http://www.jiehoo.com/jsr168.htm#comments</comments>
		<pubDate>Fri, 16 Mar 2007 09:01:15 +0000</pubDate>
		<dc:creator>Cherami</dc:creator>
		
	<category>Java</category>
	<category>AJAX</category><category>ajax</category><category>JSR168</category><category>pluto</category>
		<guid isPermaLink="false">http://www.jiehoo.com/jsr168.htm</guid>
		<description><![CDATA[JSR168规范是定义portlet容器及portlet之间的关系的，但是由于定稿比较早（2003年10月），所以没有涉及到portlet的独自渲染和刷新，而这个是现在的web2.0或者新一代web界面所不可或缺的，当然，新的JSR286规范可能会解决这个问题，但是我们不能等待这个规范的出台。就目前的情况看，融合jsr168和AJAX并不会很困难，问题的关键是没有一个轻量的组件或者成熟的解决方案，有的只是大的软件厂商在他们的portal产品中提供这种特性的支持。这段时间一直在用pluto，刚刚整合到我们的系统中，看了下pluto最终渲染出来的页面片断：
&#160; &#60;!&#8211; Assemble the rendering result &#8211;&#62;&#60;br /&#62;
&#160;
&#60;div id=&#34;/testsuite.TestPortlet!764587357&#124;0&#34; class=&#34;portlet&#34;&#62;&#60;br /&#62;
&#160;&#160; 
&#60;div class=&#34;header&#34;&#62;&#60;br /&#62;
&#160;&#160;&#160;&#160;&#160; &#60;!&#8211; Portlet Mode Controls &#8211;&#62;&#60;br /&#62;
&#160;&#160;&#160;&#160;&#160; &#60;a href=&#34;http://localhost:8080/pluto/portal/__pm0&#215;3testsuite0&#215;2TestPortlet1!764587357&#124;0_view&#34;&#62;&#60;span class=&#34;view&#34;&#62;&#60;/span&#62;&#60;/a&#62;&#60;br /&#62;
&#160;&#160;&#160;&#160;&#160; &#60;a href=&#34;http://localhost:8080/pluto/portal/__pm0&#215;3testsuite0&#215;2TestPortlet1!764587357&#124;0_edit&#34;&#62;&#60;span class=&#34;edit&#34;&#62;&#60;/span&#62;&#60;/a&#62;&#60;br /&#62;
&#160;&#160;&#160;&#160;&#160; &#60;a href=&#34;http://localhost:8080/pluto/portal/__pm0&#215;3testsuite0&#215;2TestPortlet1!764587357&#124;0_help&#34;&#62;&#60;span class=&#34;help&#34;&#62;&#60;/span&#62;&#60;/a&#62;&#60;br /&#62;
&#160;&#160;&#160;&#160;&#160; &#60;!&#8211; Window State Controls &#8211;&#62;&#60;br /&#62;
&#160;&#160;&#160;&#160;&#160; &#60;a href=&#34;http://localhost:8080/pluto/portal/__ws0&#215;3testsuite0&#215;2TestPortlet1!764587357&#124;0_minimized&#34;&#62;&#60;span class=&#34;min&#34;&#62;&#60;/span&#62;&#60;/a&#62;&#60;br /&#62;
&#160;&#160;&#160;&#160;&#160; &#60;a href=&#34;http://localhost:8080/pluto/portal/__ws0&#215;3testsuite0&#215;2TestPortlet1!764587357&#124;0_maximized&#34;&#62;&#60;span class=&#34;max&#34;&#62;&#60;/span&#62;&#60;/a&#62;&#60;br /&#62;
&#160;&#160;&#160;&#160;&#160; &#60;a href=&#34;http://localhost:8080/pluto/portal/__ws0&#215;3testsuite0&#215;2TestPortlet1!764587357&#124;0_normal&#34;&#62;&#60;span class=&#34;norm&#34;&#62;&#60;/span&#62;&#60;/a&#62;&#60;br /&#62;
&#160;&#160;&#160;&#160;&#160; &#60;!&#8211; Portlet Title &#8211;&#62;&#60;br /&#62;
&#160;&#160;&#160;&#160; [...]]]></description>
			<content:encoded><![CDATA[<p class='fp'>JSR168规范是定义portlet容器及portlet之间的关系的，但是由于定稿比较早（2003年10月），所以没有涉及到portlet的独自渲染和刷新，而这个是现在的web2.0或者新一代web界面所不可或缺的，当然，新的JSR286规范可能会解决这个问题，但是我们不能等待这个规范的出台。就目前的情况看，融合jsr168和AJAX并不会很困难，问题的关键是没有一个轻量的组件或者成熟的解决方案，有的只是大的软件厂商在他们的portal产品中提供这种特性的支持。这段时间一直在用pluto，刚刚整合到我们的系统中，看了下pluto最终渲染出来的页面片断：<br />
&nbsp; &lt;!&#8211; Assemble the rendering result &#8211;&gt;&lt;br /&gt;<br />
&nbsp;<br />
&lt;div id=&quot;/testsuite.TestPortlet!764587357|0&quot; class=&quot;portlet&quot;&gt;&lt;br /&gt;<br />
&nbsp;&nbsp; <br />
&lt;div class=&quot;header&quot;&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!&#8211; Portlet Mode Controls &#8211;&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;a href=&quot;http://localhost:8080/pluto/portal/__pm0&#215;3testsuite0&#215;2TestPortlet1!764587357|0_view&quot;&gt;&lt;span class=&quot;view&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;a href=&quot;http://localhost:8080/pluto/portal/__pm0&#215;3testsuite0&#215;2TestPortlet1!764587357|0_edit&quot;&gt;&lt;span class=&quot;edit&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;a href=&quot;http://localhost:8080/pluto/portal/__pm0&#215;3testsuite0&#215;2TestPortlet1!764587357|0_help&quot;&gt;&lt;span class=&quot;help&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!&#8211; Window State Controls &#8211;&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;a href=&quot;http://localhost:8080/pluto/portal/__ws0&#215;3testsuite0&#215;2TestPortlet1!764587357|0_minimized&quot;&gt;&lt;span class=&quot;min&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;a href=&quot;http://localhost:8080/pluto/portal/__ws0&#215;3testsuite0&#215;2TestPortlet1!764587357|0_maximized&quot;&gt;&lt;span class=&quot;max&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;a href=&quot;http://localhost:8080/pluto/portal/__ws0&#215;3testsuite0&#215;2TestPortlet1!764587357|0_normal&quot;&gt;&lt;span class=&quot;norm&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!&#8211; Portlet Title &#8211;&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&lt;h2 class=&quot;title&quot;&gt;Test Portlet #1&lt;/h2&gt;<br />
&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />
&lt;br /&gt;<br />
&nbsp;&nbsp; <br />
&lt;div class=&quot;body&quot;&gt;&lt;br /&gt;<br />
从这个输出来看，我们需要做的可能很简单，替换portlet-skin.jsp，重新定义那些按钮的输出为一个javascript，这样应该就可以部分刷新了。目前我们产品的其它一个功能已经可以做到这个了。现在的问题就是转换了。
</p>
	<br />
	作者: <a href="http://www.jiehoo.com">解惑/Cherami</a><br />
	原载: <a href="http://www.jiehoo.com/jsr168.htm">JSR168</a><br />
	<strong>版权所有。转载时必须以链接形式注明作者和原始出处及本声明。</strong><br />
	分类: <a href="http://www.jiehoo.com/category/java/" title="显示Java的所有文章" rel="category tag">Java</a>,  <a href="http://www.jiehoo.com/category/ajax/" title="显示AJAX的所有文章" rel="category tag">AJAX</a><br />]]></content:encoded>
			<wfw:commentRSS>http://www.jiehoo.com/jsr168.htm/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>浏览器缓存</title>
		<link>http://www.jiehoo.com/browser-cache-problem.htm</link>
		<comments>http://www.jiehoo.com/browser-cache-problem.htm#comments</comments>
		<pubDate>Thu, 15 Feb 2007 07:44:18 +0000</pubDate>
		<dc:creator>Cherami</dc:creator>
		
	<category>Web</category>
	<category>AJAX</category><category>缓存</category><category>问题</category><category>浏览器</category>
		<guid isPermaLink="false">http://www.jiehoo.com/browser-cache-problem.htm</guid>
		<description><![CDATA[相信有不少人会遇到浏览器缓存的问题，因为IE默认会缓存访问过的网页，特别是URL的参数是固定的，但是很可能内容会变化。
大部分都知道的可能是在head中增加meta信息：
&#60;META HTTP-EQUIV=&#34;PRAGMA&#34; CONTENT=&#34;NO-CACHE&#34;&#62; 
而有文章指出这个依然有问题，如果网页内容超过32K，那么那个设置就实效了，所以要把它放到网页的最后：
&#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#60;BODY&#62; 
网页内容。。。 
&#60;/BODY&#62; 
&#60;HEAD&#62; 
&#60;META HTTP-EQUIV=&#34;PRAGMA&#34; CONTENT=&#34;NO-CACHE&#34;&#62; 
&#60;/HEAD&#62; 
&#60;/HTML&#62;
现在AJAX很流行，而AJAX返回的内容很可能不再是一个完整的网页，那么就不能使用上述的方法，有另外的文章说到可以使用服务器端的HTTP头控制，我试验的结果是无效：
&#160;&#160;&#160; response.setHeader(&#34;Cache-Control&#34;,&#34;no-cache&#34;); 
&#160;&#160;&#160; response.setHeader(&#34;Cache-Control&#34;,&#34;no-store&#34;); 
&#160;&#160;&#160; response.setHeader(&#34;Cache-Control&#34;,&#34;must-revalidate&#34;); 
最后采取的方法就是在使用AJAX发送请求的时候附加一个时间戳：
var xmlhttp = createrequest();
xmlhttp.open(&#34;GET&#34;,appendTimestamp(url),true);
&#160; function appendTimestamp(url)
&#160; {
&#160; &#160;&#160;&#160; if (url.indexOf(&#34;?&#34;)&#62;0)
&#160; &#160;&#160;&#160; {
&#160; &#160;&#160;&#160; &#160;&#160;&#160; return url+&#34;&#38;ajax_time=&#34;+new Date().getTime();
&#160; &#160;&#160;&#160; } else
&#160; &#160;&#160;&#160; {
&#160; &#160;&#160;&#160; &#160;&#160;&#160; return url+&#34;?ajax_time=&#34;+new Date().getTime();
&#160; &#160;&#160;&#160; }
&#160; }
当然这个方法也只能解决部分问题，如果URL太长也不行。
更新：
对于AJAX的情况，也可以使用
 xmlhttp.setRequestHeader(&#34;Cache-Control&#34;,&#34;no-cache&#34;); 
推荐另外一个日志：再论怎么有效利用浏览器缓存之怎么避免浏览器缓存静态文件。
2007年2月28日更新：
使用服务器端控制AJAX页面缓存：
&#160;&#160;&#160; response.setHeader( &#34;Pragma&#34;, &#34;no-cache&#34; [...]]]></description>
			<content:encoded><![CDATA[<p class='fp'>相信有不少人会遇到浏览器缓存的问题，因为IE默认会缓存访问过的网页，特别是URL的参数是固定的，但是很可能内容会变化。<br />
大部分都知道的可能是在head中增加meta信息：<br />
&lt;META HTTP-EQUIV=&quot;PRAGMA&quot; CONTENT=&quot;NO-CACHE&quot;&gt; <br />
而有文章指出这个依然有问题，<a href="http://www.6to23.com/tech/btkf/wlbc/asp/28214.htm">如果网页内容超过32K，那么那个设置就实效了</a>，所以要把它放到网页的最后：<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;BODY&gt; <br />
网页内容。。。 <br />
&lt;/BODY&gt; <br />
&lt;HEAD&gt; <br />
&lt;META HTTP-EQUIV=&quot;PRAGMA&quot; CONTENT=&quot;NO-CACHE&quot;&gt; <br />
&lt;/HEAD&gt; <br />
&lt;/HTML&gt;</p>
<p>现在AJAX很流行，而AJAX返回的内容很可能不再是一个完整的网页，那么就不能使用上述的方法，有另外的文章说到可以使用<a href="http://www.mnot.net/cache_docs/#CACHE-CONTROL">服务器端的HTTP头控制</a>，我试验的结果是<strong>无效</strong>：<br />
&nbsp;&nbsp;&nbsp; response.setHeader(&quot;Cache-Control&quot;,&quot;no-cache&quot;); <br />
&nbsp;&nbsp;&nbsp; response.setHeader(&quot;Cache-Control&quot;,&quot;no-store&quot;); <br />
&nbsp;&nbsp;&nbsp; response.setHeader(&quot;Cache-Control&quot;,&quot;must-revalidate&quot;); </p>
<p>最后采取的方法就是在使用AJAX发送请求的时候附加一个时间戳：<br />
var xmlhttp = createrequest();<br />
xmlhttp.open(&quot;GET&quot;,appendTimestamp(url),true);</p>
<p>&nbsp; function appendTimestamp(url)<br />
&nbsp; {<br />
&nbsp; &nbsp;&nbsp;&nbsp; if (url.indexOf(&quot;?&quot;)&gt;0)<br />
&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return url+&quot;&amp;ajax_time=&quot;+new Date().getTime();<br />
&nbsp; &nbsp;&nbsp;&nbsp; } else<br />
&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return url+&quot;?ajax_time=&quot;+new Date().getTime();<br />
&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp; }</p>
<p>当然这个方法也只能解决部分问题，如果URL太长也不行。</p>
<p>更新：<br />
对于AJAX的情况，也可以使用<br />
<strike> xmlhttp.setRequestHeader(&quot;Cache-Control&quot;,&quot;no-cache&quot;); </strike></p>
<p>推荐另外一个日志：<a href="http://x98188.bokele.com/?CH=355&amp;ViewID=31950">再论怎么有效利用浏览器缓存之怎么避免浏览器缓存静态文件</a>。</p>
<p>2007年2月28日更新：<br />
使用服务器端控制AJAX页面缓存：<br />
&nbsp;&nbsp;&nbsp; response.setHeader( &quot;Pragma&quot;, &quot;no-cache&quot; );<br />
&nbsp;&nbsp;&nbsp; response.addHeader( &quot;Cache-Control&quot;, &quot;must-revalidate&quot; );<br />
&nbsp;&nbsp;&nbsp; response.addHeader( &quot;Cache-Control&quot;, &quot;no-cache&quot; );<br />
&nbsp;&nbsp;&nbsp; response.addHeader( &quot;Cache-Control&quot;, &quot;no-store&quot; );<br />
&nbsp;&nbsp;&nbsp; response.setDateHeader(&quot;Expires&quot;, 0);<br />
单纯的使用 xmlhttp.setRequestHeader(&quot;Cache-Control&quot;,&quot;no-cache&quot;)无效。
</p>
	<br />
	作者: <a href="http://www.jiehoo.com">解惑/Cherami</a><br />
	原载: <a href="http://www.jiehoo.com/browser-cache-problem.htm">浏览器缓存</a><br />
	<strong>版权所有。转载时必须以链接形式注明作者和原始出处及本声明。</strong><br />
	分类: <a href="http://www.jiehoo.com/category/web/" title="显示Web的所有文章" rel="category tag">Web</a>,  <a href="http://www.jiehoo.com/category/ajax/" title="显示AJAX的所有文章" rel="category tag">AJAX</a><br />]]></content:encoded>
			<wfw:commentRSS>http://www.jiehoo.com/browser-cache-problem.htm/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>关于AJAX的一些思考</title>
		<link>http://www.jiehoo.com/some-ideas-about-ajax.htm</link>
		<comments>http://www.jiehoo.com/some-ideas-about-ajax.htm#comments</comments>
		<pubDate>Mon, 22 Jan 2007 06:06:19 +0000</pubDate>
		<dc:creator>Cherami</dc:creator>
		
	<category>AJAX</category><category>AJAX</category>
		<guid isPermaLink="false">http://www.jiehoo.com/some-ideas-about-ajax.htm</guid>
		<description><![CDATA[公司的产品中也引入了AJAX，但是是很简单的，代码都是自己写的，开发经理Paul看到Yahoo的新邮箱后感觉不错，期望我们也使用AJAX（实际上我们已经在使用了）。
使用AJAX，个人感觉有一些问题，首先就是开发难度，JavaScript的调试比较困难（相对于Java），而且还要解决浏览器兼容问题，另外一个就是性能，如果使用不好，对于性能反到是有害的，很多站点的解决方案都是一个大框架页面，剩下的块块都是使用AJAX一个一个加载（我们也是），这个对服务器端的负载实际是加重了。
当然也并非没有办法解决，首先就是要有一个合适的AJAX的框架，开发人员需要考虑的问题相对较少；其次就是和服务器端的交互，可以使用某种客户端缓存机制减轻负载并加快用户操作的相应时间。如果页面一直保持不完全刷新，那么这样的AJAX方案还是可以接受的，最怕的就是要经常完全刷新页面，或者是internet应用，需要对搜索引擎友好。

	
	作者: 解惑/Cherami
	原载: 关于AJAX的一些思考
	版权所有。转载时必须以链接形式注明作者和原始出处及本声明。
	分类: AJAX]]></description>
			<content:encoded><![CDATA[<p class='fp'>公司的产品中也引入了AJAX，但是是很简单的，代码都是自己写的，开发经理Paul看到Yahoo的新邮箱后感觉不错，期望我们也使用AJAX（实际上我们已经在使用了）。<br />
使用AJAX，个人感觉有一些问题，首先就是开发难度，JavaScript的调试比较困难（相对于Java），而且还要解决浏览器兼容问题，另外一个就是性能，如果使用不好，对于性能反到是有害的，很多站点的解决方案都是一个大框架页面，剩下的块块都是使用AJAX一个一个加载（我们也是），这个对服务器端的负载实际是加重了。<br />
当然也并非没有办法解决，首先就是要有一个合适的AJAX的框架，开发人员需要考虑的问题相对较少；其次就是和服务器端的交互，可以使用某种客户端缓存机制减轻负载并加快用户操作的相应时间。如果页面一直保持不完全刷新，那么这样的AJAX方案还是可以接受的，最怕的就是要经常完全刷新页面，或者是internet应用，需要对搜索引擎友好。
</p>
	<br />
	作者: <a href="http://www.jiehoo.com">解惑/Cherami</a><br />
	原载: <a href="http://www.jiehoo.com/some-ideas-about-ajax.htm">关于AJAX的一些思考</a><br />
	<strong>版权所有。转载时必须以链接形式注明作者和原始出处及本声明。</strong><br />
	分类: <a href="http://www.jiehoo.com/category/ajax/" title="显示AJAX的所有文章" rel="category tag">AJAX</a><br />]]></content:encoded>
			<wfw:commentRSS>http://www.jiehoo.com/some-ideas-about-ajax.htm/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>推荐一个AJAX相关的JS库：setInnerHTML</title>
		<link>http://www.jiehoo.com/recommend-ajax-js-setinnerhtml.htm</link>
		<comments>http://www.jiehoo.com/recommend-ajax-js-setinnerhtml.htm#comments</comments>
		<pubDate>Tue, 24 Oct 2006 02:20:54 +0000</pubDate>
		<dc:creator>Cherami</dc:creator>
		
	<category>JavaScript</category>
	<category>AJAX</category><category>AJAX</category><category>innerHTML</category><category>JavaScript</category>
		<guid isPermaLink="false">http://www.jiehoo.com/%e6%8e%a8%e8%8d%90%e4%b8%80%e4%b8%aaajax%e7%9b%b8%e5%85%b3%e7%9a%84js%e5%ba%93%ef%bc%9asetinnerhtml.htm</guid>
		<description><![CDATA[>跨浏览器的设置innerHTML方法

这个JS库是无意中发现的，而且刚好我们的产品要引入AJAX，但是我们又不能使用纯粹的AJAX方案，因为我们的产品已经开发了很长时间了，服务器端返回的是HTML，要专门为引入的AJAX返回特殊的内容工作量比较大，但是由于返回的HTML比较复杂，还可能包含了JS文件的引用以及JS代码，所以在IE下或者FF下总是有这样那样的问题，这个JS库的引入很好的解决了我们面临的问题，推荐在已有B/S产品或者项目中引入AJAX特性的项目使用这个解决方案。

	
	作者: 解惑/Cherami
	原载: 推荐一个AJAX相关的JS库：setInnerHTML
	版权所有。转载时必须以链接形式注明作者和原始出处及本声明。
	分类: JavaScript,  AJAX]]></description>
			<content:encoded><![CDATA[<p class='fp'>><a title="Permanent link to this article" href="http://www.ajaxwing.com/index.php?id=3">跨浏览器的设置innerHTML方法</a></h3>
<p>
这个JS库是无意中发现的，而且刚好我们的产品要引入AJAX，但是我们又不能使用纯粹的AJAX方案，因为我们的产品已经开发了很长时间了，服务器端返回的是HTML，要专门为引入的AJAX返回特殊的内容工作量比较大，但是由于返回的HTML比较复杂，还可能包含了JS文件的引用以及JS代码，所以在IE下或者FF下总是有这样那样的问题，这个JS库的引入很好的解决了我们面临的问题，推荐在已有B/S产品或者项目中引入AJAX特性的项目使用这个解决方案。
</p>
	<br />
	作者: <a href="http://www.jiehoo.com">解惑/Cherami</a><br />
	原载: <a href="http://www.jiehoo.com/recommend-ajax-js-setinnerhtml.htm">推荐一个AJAX相关的JS库：setInnerHTML</a><br />
	<strong>版权所有。转载时必须以链接形式注明作者和原始出处及本声明。</strong><br />
	分类: <a href="http://www.jiehoo.com/category/javascript/" title="显示JavaScript的所有文章" rel="category tag">JavaScript</a>,  <a href="http://www.jiehoo.com/category/ajax/" title="显示AJAX的所有文章" rel="category tag">AJAX</a><br />]]></content:encoded>
			<wfw:commentRSS>http://www.jiehoo.com/recommend-ajax-js-setinnerhtml.htm/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>IE的并发连接请求限制导致的问题</title>
		<link>http://www.jiehoo.com/ie-two-concurrent-request-limitation-problem.htm</link>
		<comments>http://www.jiehoo.com/ie-two-concurrent-request-limitation-problem.htm#comments</comments>
		<pubDate>Mon, 23 Oct 2006 03:22:05 +0000</pubDate>
		<dc:creator>Cherami</dc:creator>
		
	<category>Web</category>
	<category>JavaScript</category>
	<category>AJAX</category><category>限制</category><category>连接</category><category>IE</category>
		<guid isPermaLink="false">http://www.jiehoo.com/ie%e7%9a%84%e5%b9%b6%e5%8f%91%e8%bf%9e%e6%8e%a5%e8%af%b7%e6%b1%82%e9%99%90%e5%88%b6%e5%af%bc%e8%87%b4%e7%9a%84%e9%97%ae%e9%a2%98.htm</guid>
		<description><![CDATA[公司的产品导入了AJAX，但是后来发现一个严重的问题，就是在IE下，首页切换到其它页面比较困难，特别是首页还有一个下拉列表，选择不同的值会将首页的那些AJAX区域重新加载，如果其中几个比较慢（服务器端返回比较慢，因为有些存在性能问题，数据量大了以后查询特别慢），那么切换的时候要等很长时间，所以表面上看上去就是IE死掉了，但是在FireFox下没有这个问题。后来查证是IE下有两个并发连接请求的限制，每个AJAX请求也都算一个请求。后来的解决办法就是将AJAX请求排队，一个执行完了才能执行另外一个，这样无论怎么切换都是马上响应的，这个修改只对IE有效，FF下就不进行限制。
 &#160; var divRequestMap = new Object();
&#160; var requestDivIdList = new Array();
&#160; var currentRequest=0;
&#160; var requestQueue = new Array();
&#160; var useRequestQueueFlag= /msie/ig.test(navigator.userAgent);
&#160; 
&#160; function createrequest()
&#160; {
&#160;&#160;&#160;&#160; try
&#160;&#160;&#160;&#160; {&#160; 
&#160;&#160;&#160;&#160;&#160;&#160; if(typeof ActiveXObject!=&#34;undefined&#34;)
&#160;&#160;&#160;&#160;&#160;&#160; {
&#160;&#160;&#160;&#160;&#160;&#160;&#160; try
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return new ActiveXObject(&#34;Microsoft.XMLHTTP&#34;);
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }catch(a)
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {}
&#160;&#160;&#160;&#160;&#160;&#160; }
&#160;&#160;&#160;&#160;&#160;&#160; if(typeof XMLHttpRequest!=&#34;undefined&#34;)
&#160;&#160;&#160;&#160;&#160;&#160; {
&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return new XMLHttpRequest()
&#160;&#160;&#160;&#160;&#160;&#160; }
&#160;&#160;&#160;&#160;&#160;&#160; return null;
&#160;&#160;&#160;&#160; }catch(e){}
&#160; }
&#160;&#160;&#160; function abortRequest(request) 
&#160;&#160;&#160; {
&#160;&#160;&#160; [...]]]></description>
			<content:encoded><![CDATA[<p class='fp'>公司的产品导入了AJAX，但是后来发现一个严重的问题，就是在IE下，首页切换到其它页面比较困难，特别是首页还有一个下拉列表，选择不同的值会将首页的那些AJAX区域重新加载，如果其中几个比较慢（服务器端返回比较慢，因为有些存在性能问题，数据量大了以后查询特别慢），那么切换的时候要等很长时间，所以表面上看上去就是IE死掉了，但是在FireFox下没有这个问题。后来查证是<a href="http://blogs.msdn.com/ie/archive/2005/04/11/407189.aspx">IE下有两个并发连接请求的限制</a>，每个AJAX请求也都算一个请求。后来的解决办法就是将AJAX请求排队，一个执行完了才能执行另外一个，这样无论怎么切换都是马上响应的，这个修改只对IE有效，FF下就不进行限制。<br />
<a id="more-31"></a> &nbsp; var divRequestMap = new Object();<br />
&nbsp; var requestDivIdList = new Array();<br />
&nbsp; var currentRequest=0;<br />
&nbsp; var requestQueue = new Array();<br />
&nbsp; var useRequestQueueFlag= /msie/ig.test(navigator.userAgent);<br />
&nbsp; <br />
&nbsp; function createrequest()<br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp; try<br />
&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(typeof ActiveXObject!=&quot;undefined&quot;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }catch(a)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(typeof XMLHttpRequest!=&quot;undefined&quot;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new XMLHttpRequest()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return null;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }catch(e){}<br />
&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; function abortRequest(request) <br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; function doNothing() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; request.onreadystatechange = doNothing;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; request.abort();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; delete request;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; currentRequest&#8211;;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; function addRequest(url,divId)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; var item=new Array();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; item[0]=url;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; item[1]=divId;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; requestQueue.push(item);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; function abortAllRequest()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (useRequestQueueFlag)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; while (requestQueue.length)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; requestQueue.shift();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; while (requestDivIdList.length)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; abortRequest(divRequestMap[requestDivIdList.shift()]);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; currentRequest=0;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; function removeRequestDivId(divId)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (i=0;i&lt;requestDivIdList.length;i++)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; var item=requestDivIdList.shift();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (item==divId)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; requestDivIdList.push(item);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; function executeRequestArray()<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (requestQueue.length)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; var item=requestQueue.shift();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (!ajax_loaddiv_get(item[0],item[1],true))<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; requestQueue.unshift(item);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; setTimeout(&quot;executeRequestArray()&quot;,200);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp; abortAllRequest();<br />
&nbsp; executeRequestArray();<br />
&nbsp; <br />
&nbsp; function useRequestQueue(url,divId,queue)<br />
&nbsp; {<br />
&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; if (!useRequestQueueFlag)<br />
&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; {<br />
&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; return true;<br />
&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; }<br />
&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; if (currentRequest&gt;0)<br />
&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; {<br />
&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; if (!queue)<br />
&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; addRequest(url,divId);<br />
&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; return false;<br />
&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; }&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp; currentRequest++;<br />
&nbsp;&nbsp;&nbsp; &nbsp; return true;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp; }</p>
<p>&nbsp; function ajax_loaddiv_get(url,divId,queue)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(divRequestMap[divId] != null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; abortRequest(divRequestMap[divId]);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!useRequestQueue(url,divId,queue))<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; var req = createrequest();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; divRequestMap[divId]=req;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; requestDivIdList.push(divId);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; req.open(&quot;GET&quot;,url,true);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; req.onreadystatechange=function() <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // if many serveral request is sent, and the reponseTest requires to be set into the same div, <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // only the last one&#8217;s request&#8217;s responseTest will be set.<br />
&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (req.readyState==4) &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; currentRequest&#8211;;<br />
&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; removeRequestDivId(divId);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var status=0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; status=req.status;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch(err){}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (status == 200)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setInnerHTML(document.getElementById(divId),req.responseText);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setInnerHTML(document.getElementById(divId),&quot;&lt;font class=ErrorDatastl&gt;Error:&quot;+req.statusText+&quot;(code:&quot;+req.status+&quot;)&lt;/font&gt;&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; divRequestMap[divId]=null;<br />
&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; req.send(null)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }catch(e){}&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return&nbsp; true;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp; }<br />
&nbsp; <br />
&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>也可以<a href="http://www.jiehoo.com/wp-content/uploads/2006/10/ajax.js">下载完整的实现</a>。
</p>
	<br />
	作者: <a href="http://www.jiehoo.com">解惑/Cherami</a><br />
	原载: <a href="http://www.jiehoo.com/ie-two-concurrent-request-limitation-problem.htm">IE的并发连接请求限制导致的问题</a><br />
	<strong>版权所有。转载时必须以链接形式注明作者和原始出处及本声明。</strong><br />
	分类: <a href="http://www.jiehoo.com/category/web/" title="显示Web的所有文章" rel="category tag">Web</a>,  <a href="http://www.jiehoo.com/category/javascript/" title="显示JavaScript的所有文章" rel="category tag">JavaScript</a>,  <a href="http://www.jiehoo.com/category/ajax/" title="显示AJAX的所有文章" rel="category tag">AJAX</a><br />]]></content:encoded>
			<wfw:commentRSS>http://www.jiehoo.com/ie-two-concurrent-request-limitation-problem.htm/feed/</wfw:commentRSS>
		</item>
	</channel>
</rss>
