<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[阿Tim日志]]></title> 
<link>https://atim.cn/index.php</link> 
<description><![CDATA[专业的php开发者.开发团队的带队人]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[阿Tim日志]]></copyright>
<item>
<link>https://atim.cn/post/256/</link>
<title><![CDATA[分析sajax]]></title> 
<author>bkkkd &lt;partybase@gmail.com&gt;</author>
<category><![CDATA[开发应用]]></category>
<pubDate>Thu, 19 Apr 2007 05:14:51 +0000</pubDate> 
<guid>https://atim.cn/post/256/</guid> 
<description>
<![CDATA[ 
	现在学习ajax的人太多了。网上，书店都已经大量摆放ajax相关的书籍。我不喜欢看太多文字的东西。所以不可能去看买一本的书来慢慢看。看那么多字不如看明白代码。那才是最重要的。而且ajax本来就是把老技术重新整合而成的技术。So，只要在原来的技术基础上，重新理解一下新概念就可以了。(如果对ajax基本概念及动作流程不了解的，请先google搜一下"什么是ajax")<br/><br/>选择sajax来看也只是偶然。昨天在网上看到一篇blog说sajax是比较好的ajax框架。所以我就去下载一份来看了。<br/><br/>我选择了其中更新服务器时间的那个例子来讲一下吧.<br/>example_date.php<br/><div class="code"><br/>&lt;?<br/>require(&quot;Sajax.php&quot;);<br/><br/>// Leonardo Lorieri<br/>// My first SAJAX implementention, few lines of inspiration<br/>// A good way to understand SAJAX programming<br/>//<br/>// Work Flow:<br/>// 1- starting by the &lt;body onload=&quot;get_date()&quot;&gt;<br/>// 2- loading the server&#039;s date from the php function,<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;calling the javascript function to show it.<br/>// 3- scheduling another load to the next second<br/>//<br/>// Disclaimer: Hey! I dont speak english<br/>// Under (put your choice here) license<br/><br/>function show_now() &#123;<br/>&nbsp;&nbsp;//return server date<br/>&nbsp;&nbsp;return date(&quot;l dS of F Y h:i:s A&quot;);<br/>&#125;<br/><br/>//starting SAJAX stuff<br/>$sajax_request_type = &quot;GET&quot;;<br/>sajax_init();<br/>sajax_export(&quot;show_now&quot;);<br/>sajax_handle_client_request();<br/>?&gt;<br/>&lt;html&gt;<br/>&lt;head&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;Show Server&#039;s Date&lt;/title&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;script&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;?<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_show_javascript();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function show_me(date_server) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById(&quot;date_div&quot;).innerHTML = date_server;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function get_date() &#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//put the return of php&#039;s show_now func<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//to the javascript show_me func as a parameter<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x_show_now(show_me);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//do it every 1 second<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setTimeout(&quot;get_date()&quot;, 1000);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/script&gt;<br/><br/>&lt;/head&gt;<br/>&lt;body&nbsp;&nbsp;onload=&quot;get_date();&quot;&gt;<br/>Server date: &lt;div id=&quot;date_div&quot;&gt;(loading...)&lt;/div&gt;<br/>&lt;/body&gt;<br/>&lt;/html&gt;<br/><br/></div><br/>Sajax.php<br/><div class="code"><br/>&lt;?php&nbsp;&nbsp;<br/>if (!isset($SAJAX_INCLUDED)) &#123;<br/><br/>&nbsp;&nbsp;/*&nbsp;&nbsp;<br/>&nbsp;&nbsp; * GLOBALS AND DEFAULTS<br/>&nbsp;&nbsp; *<br/>&nbsp;&nbsp; */ <br/>&nbsp;&nbsp;$GLOBALS&#91;&#039;sajax_version&#039;&#93; = &#039;0.12&#039;;&nbsp;&nbsp;<br/>&nbsp;&nbsp;$GLOBALS&#91;&#039;sajax_debug_mode&#039;&#93; = 0;<br/>&nbsp;&nbsp;$GLOBALS&#91;&#039;sajax_export_list&#039;&#93; = array();<br/>&nbsp;&nbsp;$GLOBALS&#91;&#039;sajax_request_type&#039;&#93; = &#039;GET&#039;;<br/>&nbsp;&nbsp;$GLOBALS&#91;&#039;sajax_remote_uri&#039;&#93; = &#039;&#039;;<br/>&nbsp;&nbsp;$GLOBALS&#91;&#039;sajax_failure_redirect&#039;&#93; = &#039;&#039;;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;/*<br/>&nbsp;&nbsp; * CODE<br/>&nbsp;&nbsp; *<br/>&nbsp;&nbsp; */ <br/>&nbsp;&nbsp; <br/>&nbsp;&nbsp;//<br/>&nbsp;&nbsp;// Initialize the Sajax library.<br/>&nbsp;&nbsp;//<br/>&nbsp;&nbsp;function sajax_init() &#123;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;//<br/>&nbsp;&nbsp;// Helper function to return the script&#039;s own URI. <br/>&nbsp;&nbsp;// <br/>&nbsp;&nbsp;function sajax_get_my_uri() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return $_SERVER&#91;&quot;REQUEST_URI&quot;&#93;;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;$sajax_remote_uri = sajax_get_my_uri();<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;//<br/>&nbsp;&nbsp;// Helper function to return an eval()-usable representation<br/>&nbsp;&nbsp;// of an object in JavaScript.<br/>&nbsp;&nbsp;// <br/>&nbsp;&nbsp;function sajax_get_js_repr($value) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$type = gettype($value);<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if ($type == &quot;boolean&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return ($value) ? &quot;Boolean(true)&quot; : &quot;Boolean(false)&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>&nbsp;&nbsp;&nbsp;&nbsp;elseif ($type == &quot;integer&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &quot;parseInt($value)&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>&nbsp;&nbsp;&nbsp;&nbsp;elseif ($type == &quot;double&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &quot;parseFloat($value)&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>&nbsp;&nbsp;&nbsp;&nbsp;elseif ($type == &quot;array&quot; &#124;&#124; $type == &quot;object&quot; ) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// XXX Arrays with non-numeric indices are not<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// permitted according to ECMAScript, yet everyone<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// uses them.. We&#039;ll use an object.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$s = &quot;&#123; &quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($type == &quot;object&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$value = get_object_vars($value);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach ($value as $k=&gt;$v) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$esc_key = sajax_esc($k);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (is_numeric($k)) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$s .= &quot;$k: &quot; . sajax_get_js_repr($v) . &quot;, &quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$s .= &quot;&#92;&quot;$esc_key&#92;&quot;: &quot; . sajax_get_js_repr($v) . &quot;, &quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (count($value))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$s = substr($s, 0, -2);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $s . &quot; &#125;&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>&nbsp;&nbsp;&nbsp;&nbsp;else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$esc_val = sajax_esc($value);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$s = &quot;&#039;$esc_val&#039;&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $s;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;function sajax_handle_client_request() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;global $sajax_export_list;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$mode = &quot;&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if (! empty($_GET&#91;&quot;rs&quot;&#93;)) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mode = &quot;get&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if (!empty($_POST&#91;&quot;rs&quot;&#93;))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mode = &quot;post&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if (empty($mode)) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;$target = &quot;&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if ($mode == &quot;get&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// Bust cache in the head<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;header (&quot;Expires: Mon, 26 Jul 1997 05:00:00 GMT&quot;);&nbsp;&nbsp;&nbsp;&nbsp;// Date in the past<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;header (&quot;Last-Modified: &quot; . gmdate(&quot;D, d M Y H:i:s&quot;) . &quot; GMT&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// always modified<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;header (&quot;Cache-Control: no-cache, must-revalidate&quot;);&nbsp;&nbsp;// HTTP/1.1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;header (&quot;Pragma: no-cache&quot;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// HTTP/1.0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$func_name = $_GET&#91;&quot;rs&quot;&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (! empty($_GET&#91;&quot;rsargs&quot;&#93;)) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$args = $_GET&#91;&quot;rsargs&quot;&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$args = array();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$func_name = $_POST&#91;&quot;rs&quot;&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (! empty($_POST&#91;&quot;rsargs&quot;&#93;)) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$args = $_POST&#91;&quot;rsargs&quot;&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$args = array();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if (! in_array($func_name, $sajax_export_list))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;-:$func_name not callable&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;+:&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$result = call_user_func_array($func_name, $args);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;var res = &quot; . trim(sajax_get_js_repr($result)) . &quot;; res;&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;exit;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;function sajax_get_common_js() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;global $sajax_debug_mode;<br/>&nbsp;&nbsp;&nbsp;&nbsp;global $sajax_request_type;<br/>&nbsp;&nbsp;&nbsp;&nbsp;global $sajax_remote_uri;<br/>&nbsp;&nbsp;&nbsp;&nbsp;global $sajax_failure_redirect;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$t = strtoupper($sajax_request_type);<br/>&nbsp;&nbsp;&nbsp;&nbsp;if ($t != &quot;&quot; &amp;&amp; $t != &quot;GET&quot; &amp;&amp; $t != &quot;POST&quot;) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &quot;// Invalid type: $t.. &#92;n&#92;n&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;ob_start();<br/>&nbsp;&nbsp;&nbsp;&nbsp;?&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;// remote scripting library<br/>&nbsp;&nbsp;&nbsp;&nbsp;// (c) copyright 2005 modernmethod, inc<br/>&nbsp;&nbsp;&nbsp;&nbsp;var sajax_debug_mode = &lt;?php echo $sajax_debug_mode ? &quot;true&quot; : &quot;false&quot;; ?&gt;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;var sajax_request_type = &quot;&lt;?php echo $t; ?&gt;&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;var sajax_target_id = &quot;&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;var sajax_failure_redirect = &quot;&lt;?php echo $sajax_failure_redirect; ?&gt;&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;function sajax_debug(text) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (sajax_debug_mode)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(text);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; function sajax_init_object() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sajax_debug(&quot;sajax_init_object() called..&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var A;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var msxmlhttp = new Array(<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#039;Msxml2.XMLHTTP.5.0&#039;,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#039;Msxml2.XMLHTTP.4.0&#039;,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#039;Msxml2.XMLHTTP.3.0&#039;,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#039;Msxml2.XMLHTTP&#039;,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#039;Microsoft.XMLHTTP&#039;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (var i = 0; i &lt; msxmlhttp.length; i++) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A = new ActiveXObject(msxmlhttp&#91;i&#93;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; catch (e) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A = null;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!A &amp;&amp; typeof XMLHttpRequest != &quot;undefined&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A = new XMLHttpRequest();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!A)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_debug(&quot;Could not create connection object.&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return A;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;var sajax_requests = new Array();<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;function sajax_cancel() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (var i = 0; i &lt; sajax_requests.length; i++) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_requests&#91;i&#93;.abort();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;function sajax_do_call(func_name, args) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var i, x, n;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var uri;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var post_data;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var target_id;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_debug(&quot;in sajax_do_call()..&quot; + sajax_request_type + &quot;/&quot; + sajax_target_id);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target_id = sajax_target_id;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (typeof(sajax_request_type) == &quot;undefined&quot; &#124;&#124; sajax_request_type == &quot;&quot;) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_request_type = &quot;GET&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uri = &quot;&lt;?php echo $sajax_remote_uri; ?&gt;&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (sajax_request_type == &quot;GET&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (uri.indexOf(&quot;?&quot;) == -1) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uri += &quot;?rs=&quot; + escape(func_name);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uri += &quot;&amp;rs=&quot; + escape(func_name);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uri += &quot;&amp;rst=&quot; + escape(sajax_target_id);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uri += &quot;&amp;rsrnd=&quot; + new Date().getTime();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i = 0; i &lt; args.length-1; i++) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uri += &quot;&amp;rsargs&#91;&#93;=&quot; + escape(args&#91;i&#93;);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;post_data = null;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if (sajax_request_type == &quot;POST&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;post_data = &quot;rs=&quot; + escape(func_name);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;post_data += &quot;&amp;rst=&quot; + escape(sajax_target_id);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;post_data += &quot;&amp;rsrnd=&quot; + new Date().getTime();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i = 0; i &lt; args.length-1; i++) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;post_data = post_data + &quot;&amp;rsargs&#91;&#93;=&quot; + escape(args&#91;i&#93;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(&quot;Illegal request type: &quot; + sajax_request_type);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x = sajax_init_object();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (x == null) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (sajax_failure_redirect != &quot;&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location.href = sajax_failure_redirect;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_debug(&quot;NULL sajax object for user agent:&#92;n&quot; + navigator.userAgent);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x.open(sajax_request_type, uri, true);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// window.open(uri);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_requests&#91;sajax_requests.length&#93; = x;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (sajax_request_type == &quot;POST&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x.setRequestHeader(&quot;Method&quot;, &quot;POST &quot; + uri + &quot; HTTP/1.1&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x.setRequestHeader(&quot;Content-Type&quot;, &quot;application/x-www-form-urlencoded&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x.onreadystatechange = function() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (x.readyState != 4) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_debug(&quot;received &quot; + x.responseText);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var status;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var data;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var txt = x.responseText.replace(/^&#92;s*&#124;&#92;s*$/g,&quot;&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status = txt.charAt(0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data = txt.substring(2);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (status == &quot;&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// let&#039;s just assume this is a pre-response bailout and let it slide for now<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; else if (status == &quot;-&quot;) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(&quot;Error: &quot; + data);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (target_id != &quot;&quot;) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById(target_id).innerHTML = eval(data);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var callback;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var extra_data = false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (typeof args&#91;args.length-1&#93; == &quot;object&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callback = args&#91;args.length-1&#93;.callback;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;extra_data = args&#91;args.length-1&#93;.extra_data;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callback = args&#91;args.length-1&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callback(eval(data), extra_data);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; catch (e) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_debug(&quot;Caught error &quot; + e + &quot;: Could not eval &quot; + data );<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_debug(func_name + &quot; uri = &quot; + uri + &quot;/post = &quot; + post_data);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x.send(post_data);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_debug(func_name + &quot; waiting..&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete x;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;?php<br/>&nbsp;&nbsp;&nbsp;&nbsp;$html = ob_get_contents();<br/>&nbsp;&nbsp;&nbsp;&nbsp;ob_end_clean();<br/>&nbsp;&nbsp;&nbsp;&nbsp;return $html;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;function sajax_show_common_js() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;echo sajax_get_common_js();<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;// javascript escape a value<br/>&nbsp;&nbsp;function sajax_esc($val)<br/>&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$val = str_replace(&quot;&#92;&#92;&quot;, &quot;&#92;&#92;&#92;&#92;&quot;, $val);<br/>&nbsp;&nbsp;&nbsp;&nbsp;$val = str_replace(&quot;&#92;r&quot;, &quot;&#92;&#92;r&quot;, $val);<br/>&nbsp;&nbsp;&nbsp;&nbsp;$val = str_replace(&quot;&#92;n&quot;, &quot;&#92;&#92;n&quot;, $val);<br/>&nbsp;&nbsp;&nbsp;&nbsp;$val = str_replace(&quot;&#039;&quot;, &quot;&#92;&#92;&#039;&quot;, $val);<br/>&nbsp;&nbsp;&nbsp;&nbsp;return str_replace(&#039;&quot;&#039;, &#039;&#92;&#92;&quot;&#039;, $val);<br/>&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;function sajax_get_one_stub($func_name) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;ob_start();&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;?&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;// wrapper for &lt;?php echo $func_name; ?&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;function x_&lt;?php echo $func_name; ?&gt;() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_do_call(&quot;&lt;?php echo $func_name; ?&gt;&quot;,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x_&lt;?php echo $func_name; ?&gt;.arguments);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;?php<br/>&nbsp;&nbsp;&nbsp;&nbsp;$html = ob_get_contents();<br/>&nbsp;&nbsp;&nbsp;&nbsp;ob_end_clean();<br/>&nbsp;&nbsp;&nbsp;&nbsp;return $html;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;function sajax_show_one_stub($func_name) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;echo sajax_get_one_stub($func_name);<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;function sajax_export() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;global $sajax_export_list;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$n = func_num_args();<br/>&nbsp;&nbsp;&nbsp;&nbsp;for ($i = 0; $i &lt; $n; $i++) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sajax_export_list&#91;&#93; = func_get_arg($i);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;$sajax_js_has_been_shown = 0;<br/>&nbsp;&nbsp;function sajax_get_javascript()<br/>&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;global $sajax_js_has_been_shown;<br/>&nbsp;&nbsp;&nbsp;&nbsp;global $sajax_export_list;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$html = &quot;&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if (! $sajax_js_has_been_shown) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$html .= sajax_get_common_js();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sajax_js_has_been_shown = 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;foreach ($sajax_export_list as $func) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$html .= sajax_get_one_stub($func);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return $html;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;function sajax_show_javascript()<br/>&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;echo sajax_get_javascript();<br/>&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;$SAJAX_INCLUDED = 1;<br/>&#125;<br/>?&gt;<br/><br/></div><br/>先看example_date.php中的sajax_init()与sajax_export("show_now")，这两个函数在Sajax.php中定义的。sajax_init是一个配置函数定义，是由开始者因为程序的需要而添加的。而sajax_export这个函数有点意思<br/><div class="code"><br/>&nbsp;&nbsp;function sajax_export() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;global $sajax_export_list;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$n = func_num_args();<br/>&nbsp;&nbsp;&nbsp;&nbsp;for ($i = 0; $i &lt; $n; $i++) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sajax_export_list&#91;&#93; = func_get_arg($i);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&#125;<br/></div><br/>看到没有，在function sajax_export()中是没有定义参数的。但通过func_num_args与func_get_arg来读取参数。 这个方法我还是第一次见。兴奋一下。这个函数的作用就是让取得用于浏览器与服务器交互传递操作的函数名.但个人认为有点多此一举。为什么不直接定义成一个数组。<br/>sajax_init()与sajax_export("show_now")，可以说是定义部分。对程序进行定义<br/><br/>sajax_handle_client_request()对于ajax的请求进行操作。这里有一个地方要注意的。因为在传递中使用了rs与rsargs这个变量名，所以程序中一定不能使用这两个变量名来传递数据。程序运行这个函数会先看一个有没有定义rs（rs传递的是执行的函数名）,如果没有就return来停止下面的代码.如果已经定义了,就用rs来定义的函数名来进行执行。并把返回值转换成js可以直接调用的字符串。传送到浏览器并停止程序。所以，在执行sajax_handle_client_request前，不可能有任何数据传送到浏览器，不然会产生错误.<br/><br/>sajax_show_javascript()只是把 sajax_get_javascript()的字符串输出。所以我们来看一下sajax_get_javascript有什么内容<br/>&nbsp;&nbsp;function sajax_get_javascript()<br/>&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;global $sajax_js_has_been_shown;//是否已经展示了基本的js程序<br/>&nbsp;&nbsp;&nbsp;&nbsp;global $sajax_export_list;//可调用的php函数名数组<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$html = "";<br/>&nbsp;&nbsp;&nbsp;&nbsp;if (! $sajax_js_has_been_shown) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$html .= sajax_get_common_js();//生成基本的js程序<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sajax_js_has_been_shown = 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;foreach ($sajax_export_list as $func) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$html .= sajax_get_one_stub($func);//生成执行操作的函数，函数名为 x_&#123;php函数名&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return $html;<br/>&nbsp;&nbsp;&#125;<br/><br/>现在再来看一下sajax整体流程<br/>先定义服务器端的sajax相关数据<br/><div class="code"><br/>require(&quot;Sajax.php&quot;);<br/><br/>// Leonardo Lorieri<br/>// My first SAJAX implementention, few lines of inspiration<br/>// A good way to understand SAJAX programming<br/>//<br/>// Work Flow:<br/>// 1- starting by the &lt;body onload=&quot;get_date()&quot;&gt;<br/>// 2- loading the server&#039;s date from the php function,<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;calling the javascript function to show it.<br/>// 3- scheduling another load to the next second<br/>//<br/>// Disclaimer: Hey! I dont speak english<br/>// Under (put your choice here) license<br/><br/>function show_now() &#123;<br/>&nbsp;&nbsp;//return server date<br/>&nbsp;&nbsp;return date(&quot;l dS of F Y h:i:s A&quot;);<br/>&#125;<br/><br/>//starting SAJAX stuff<br/>$sajax_request_type = &quot;GET&quot;;<br/>sajax_init();<br/>sajax_export(&quot;show_now&quot;);<br/></div><br/>通过sajax_show_javascript()输出所有用到的js代码<br/>在浏览器端可以看到这样的源代码.<br/><div class="code"><br/>&lt;html&gt;<br/>&lt;head&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;Show Server&#039;s Date&lt;/title&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;script&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;// remote scripting library<br/>&nbsp;&nbsp;&nbsp;&nbsp;// (c) copyright 2005 modernmethod, inc<br/>&nbsp;&nbsp;&nbsp;&nbsp;var sajax_debug_mode = false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;var sajax_request_type = &quot;GET&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;var sajax_target_id = &quot;&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;var sajax_failure_redirect = &quot;&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;function sajax_debug(text) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (sajax_debug_mode)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(text);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp; function sajax_init_object() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sajax_debug(&quot;sajax_init_object() called..&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var A;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var msxmlhttp = new Array(<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#039;Msxml2.XMLHTTP.5.0&#039;,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#039;Msxml2.XMLHTTP.4.0&#039;,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#039;Msxml2.XMLHTTP.3.0&#039;,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#039;Msxml2.XMLHTTP&#039;,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#039;Microsoft.XMLHTTP&#039;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (var i = 0; i &lt; msxmlhttp.length; i++) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A = new ActiveXObject(msxmlhttp&#91;i&#93;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; catch (e) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A = null;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!A &amp;&amp; typeof XMLHttpRequest != &quot;undefined&quot;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A = new XMLHttpRequest();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!A)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_debug(&quot;Could not create connection object.&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return A;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;var sajax_requests = new Array();<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;function sajax_cancel() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (var i = 0; i &lt; sajax_requests.length; i++) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_requests&#91;i&#93;.abort();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;function sajax_do_call(func_name, args) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var i, x, n;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var uri;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var post_data;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var target_id;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_debug(&quot;in sajax_do_call()..&quot; + sajax_request_type + &quot;/&quot; + sajax_target_id);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target_id = sajax_target_id;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (typeof(sajax_request_type) == &quot;undefined&quot; &#124;&#124; sajax_request_type == &quot;&quot;) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_request_type = &quot;GET&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uri = &quot;/sajax/example_date.php&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (sajax_request_type == &quot;GET&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (uri.indexOf(&quot;?&quot;) == -1) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uri += &quot;?rs=&quot; + escape(func_name);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uri += &quot;&amp;rs=&quot; + escape(func_name);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uri += &quot;&amp;rst=&quot; + escape(sajax_target_id);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uri += &quot;&amp;rsrnd=&quot; + new Date().getTime();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i = 0; i &lt; args.length-1; i++) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uri += &quot;&amp;rsargs&#91;&#93;=&quot; + escape(args&#91;i&#93;);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;post_data = null;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if (sajax_request_type == &quot;POST&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;post_data = &quot;rs=&quot; + escape(func_name);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;post_data += &quot;&amp;rst=&quot; + escape(sajax_target_id);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;post_data += &quot;&amp;rsrnd=&quot; + new Date().getTime();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i = 0; i &lt; args.length-1; i++) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;post_data = post_data + &quot;&amp;rsargs&#91;&#93;=&quot; + escape(args&#91;i&#93;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(&quot;Illegal request type: &quot; + sajax_request_type);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x = sajax_init_object();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (x == null) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (sajax_failure_redirect != &quot;&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location.href = sajax_failure_redirect;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_debug(&quot;NULL sajax object for user agent:&#92;n&quot; + navigator.userAgent);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x.open(sajax_request_type, uri, true);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// window.open(uri);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_requests&#91;sajax_requests.length&#93; = x;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (sajax_request_type == &quot;POST&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x.setRequestHeader(&quot;Method&quot;, &quot;POST &quot; + uri + &quot; HTTP/1.1&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x.setRequestHeader(&quot;Content-Type&quot;, &quot;application/x-www-form-urlencoded&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x.onreadystatechange = function() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (x.readyState != 4) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_debug(&quot;received &quot; + x.responseText);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var status;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var data;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var txt = x.responseText.replace(/^&#92;s*&#124;&#92;s*$/g,&quot;&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status = txt.charAt(0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data = txt.substring(2);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (status == &quot;&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// let&#039;s just assume this is a pre-response bailout and let it slide for now<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; else if (status == &quot;-&quot;) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(&quot;Error: &quot; + data);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (target_id != &quot;&quot;) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById(target_id).innerHTML = eval(data);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var callback;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var extra_data = false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (typeof args&#91;args.length-1&#93; == &quot;object&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callback = args&#91;args.length-1&#93;.callback;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;extra_data = args&#91;args.length-1&#93;.extra_data;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callback = args&#91;args.length-1&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callback(eval(data), extra_data);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; catch (e) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_debug(&quot;Caught error &quot; + e + &quot;: Could not eval &quot; + data );<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_debug(func_name + &quot; uri = &quot; + uri + &quot;/post = &quot; + post_data);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x.send(post_data);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_debug(func_name + &quot; waiting..&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete x;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;// wrapper for show_now&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;function x_show_now() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_do_call(&quot;show_now&quot;,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x_show_now.arguments);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;function show_me(date_server) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById(&quot;date_div&quot;).innerHTML = date_server;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function get_date() &#123;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//put the return of php&#039;s show_now func<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//to the javascript show_me func as a parameter<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x_show_now(show_me);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//do it every 1 second<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setTimeout(&quot;get_date()&quot;, 1000);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/script&gt;<br/><br/>&lt;/head&gt;<br/>&lt;body&nbsp;&nbsp;onload=&quot;get_date();&quot;&gt;<br/>Server date: &lt;div id=&quot;date_div&quot;&gt;(loading...)&lt;/div&gt;<br/>&lt;/body&gt;<br/>&lt;/html&gt;<br/><br/></div><br/><br/>在加载body时运行了get_date()的js函数,x_show_now()是用于执行提交的命令sajax_do_call()。其中func_name就是服务器端执行操作的函数。args就是指在浏览器端在完成提交与返回操作后，在浏览器上需要进行的更新动作的对象或函数名。（如果是对像的话，必须存在callback方法与extra_data变量）<br/><div class="code"><br/>function sajax_do_call(func_name, args) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var i, x, n;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var uri;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var post_data;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var target_id;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_debug(&quot;in sajax_do_call()..&quot; + sajax_request_type + &quot;/&quot; + sajax_target_id);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target_id = sajax_target_id;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (typeof(sajax_request_type) == &quot;undefined&quot; &#124;&#124; sajax_request_type == &quot;&quot;) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_request_type = &quot;GET&quot;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uri = &quot;/sajax/example_date.php&quot;;//执行程序的uri<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//根据提交方式整理提交数据<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (sajax_request_type == &quot;GET&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (uri.indexOf(&quot;?&quot;) == -1) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uri += &quot;?rs=&quot; + escape(func_name);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uri += &quot;&amp;rs=&quot; + escape(func_name);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uri += &quot;&amp;rst=&quot; + escape(sajax_target_id);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uri += &quot;&amp;rsrnd=&quot; + new Date().getTime();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i = 0; i &lt; args.length-1; i++) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uri += &quot;&amp;rsargs&#91;&#93;=&quot; + escape(args&#91;i&#93;);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;post_data = null;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if (sajax_request_type == &quot;POST&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;post_data = &quot;rs=&quot; + escape(func_name);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;post_data += &quot;&amp;rst=&quot; + escape(sajax_target_id);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;post_data += &quot;&amp;rsrnd=&quot; + new Date().getTime();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i = 0; i &lt; args.length-1; i++) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;post_data = post_data + &quot;&amp;rsargs&#91;&#93;=&quot; + escape(args&#91;i&#93;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(&quot;Illegal request type: &quot; + sajax_request_type);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x = sajax_init_object();//生成XMLHttpRequest对象<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (x == null) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (sajax_failure_redirect != &quot;&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location.href = sajax_failure_redirect;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_debug(&quot;NULL sajax object for user agent:&#92;n&quot; + navigator.userAgent);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x.open(sajax_request_type, uri, true);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// window.open(uri);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_requests&#91;sajax_requests.length&#93; = x;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (sajax_request_type == &quot;POST&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x.setRequestHeader(&quot;Method&quot;, &quot;POST &quot; + uri + &quot; HTTP/1.1&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x.setRequestHeader(&quot;Content-Type&quot;, &quot;application/x-www-form-urlencoded&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//callback，根据XMLHttpRequest程序的状态执行操作<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x.onreadystatechange = function() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (x.readyState != 4) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_debug(&quot;received &quot; + x.responseText);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var status;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var data;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var txt = x.responseText.replace(/^&#92;s*&#124;&#92;s*$/g,&quot;&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;status = txt.charAt(0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data = txt.substring(2);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (status == &quot;&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// let&#039;s just assume this is a pre-response bailout and let it slide for now<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; else if (status == &quot;-&quot;) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(&quot;Error: &quot; + data);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (target_id != &quot;&quot;) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById(target_id).innerHTML = eval(data);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var callback;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var extra_data = false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (typeof args&#91;args.length-1&#93; == &quot;object&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果是对象的话，必须有callback方法与extra_data变量<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callback = args&#91;args.length-1&#93;.callback;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;extra_data = args&#91;args.length-1&#93;.extra_data;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callback = args&#91;args.length-1&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;callback(eval(data), extra_data);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; catch (e) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_debug(&quot;Caught error &quot; + e + &quot;: Could not eval &quot; + data );<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_debug(func_name + &quot; uri = &quot; + uri + &quot;/post = &quot; + post_data);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x.send(post_data);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sajax_debug(func_name + &quot; waiting..&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete x;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/></div><br/><br/>这是我对sajax分析所理解到的。如果各位觉得不同，请指教
]]>
</description>
</item><item>
<link>https://atim.cn/post/256/#blogcomment329</link>
<title><![CDATA[[评论] 分析sajax]]></title> 
<author>lee &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Fri, 20 Apr 2007 14:48:41 +0000</pubDate> 
<guid>https://atim.cn/post/256/#blogcomment329</guid> 
<description>
<![CDATA[ 
	ajax好烦人啊
]]>
</description>
</item><item>
<link>https://atim.cn/post/256/#blogcomment555</link>
<title><![CDATA[[评论] 分析sajax]]></title> 
<author>dgj &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Sat, 03 Nov 2007 15:45:53 +0000</pubDate> 
<guid>https://atim.cn/post/256/#blogcomment555</guid> 
<description>
<![CDATA[ 
	支持一下，欢迎大家加我QQ：25698632做个朋友
]]>
</description>
</item><item>
<link>https://atim.cn/post/256/#blogcomment556</link>
<title><![CDATA[[评论] 分析sajax]]></title> 
<author>bhui &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Sat, 03 Nov 2007 15:46:15 +0000</pubDate> 
<guid>https://atim.cn/post/256/#blogcomment556</guid> 
<description>
<![CDATA[ 
	楼主，好东西大家谢谢了
]]>
</description>
</item><item>
<link>https://atim.cn/post/256/#blogcomment557</link>
<title><![CDATA[[评论] 分析sajax]]></title> 
<author>bvjjk &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Sat, 03 Nov 2007 15:46:49 +0000</pubDate> 
<guid>https://atim.cn/post/256/#blogcomment557</guid> 
<description>
<![CDATA[ 
	真不错，我顶~~~
]]>
</description>
</item>
</channel>
</rss>