<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[静怡家园]]></title> 
<link>http://www.zhanghaijun.com/index.php</link> 
<description><![CDATA[书山有路勤为径，学海无涯苦作舟！]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[静怡家园]]></copyright>
<item>
<link>http://www.zhanghaijun.com/post//</link>
<title><![CDATA[AJAX技术在PHP开发中的简单应用(2)]]></title> 
<author>碟舞飞扬 &lt;webmaster@zhanghaijun.com&gt;</author>
<category><![CDATA[Web开发]]></category>
<pubDate>Mon, 23 Feb 2009 10:36:40 +0000</pubDate> 
<guid>http://www.zhanghaijun.com/post//</guid> 
<description>
<![CDATA[ 
	3. 使用POST方式<br/>　　其实POST方式跟Get方式是比较类似的，只是在执行Ajax的时候稍有不同，我们简单讲述一下。<br/><br/>　　假设有一个用户输入资料的表单，我们在无刷新的情况下把用户资料保存到数据库中，同时给用户一个成功的提示。<br/><br/>//构建一个表单，表单中不需要action、method之类的属性，全部由ajax来搞定了。<br/>&lt;form name=&quot;user_info&quot;&gt;<br/>姓名：&lt;input type=&quot;text&quot; name=&quot;user_name&quot; /&gt;&lt;br /&gt;<br/>年龄：&lt;input type=&quot;text&quot; name=&quot;user_age&quot; /&gt;&lt;br /&gt;<br/>性别：&lt;input type=&quot;text&quot; name=&quot;user_sex&quot; /&gt;&lt;br /&gt;<br/><br/>&lt;input type=&quot;button&quot; value=&quot;提交表单&quot; onClick=&quot;saveUserInfo()&quot;&gt;<br/>&lt;/form&gt;<br/>//构建一个接受返回信息的层：<br/>&lt;div id=&quot;msg&quot;&gt;&lt;/div&gt; <br/><br/>　　我们看到上面的form表单里没有需要提交目标等信息，并且提交按钮的类型也只是button，那么所有操作都是靠onClick事件中的saveUserInfo()函数来执行了。我们描述一下这个函数：<br/>CODE: <br/><br/><br/>function saveUserInfo()<br/>&#123;<br/>　//获取接受返回信息层<br/>　var msg = document.getElementById(&quot;msg&quot;);<br/><br/>　//获取表单对象和用户信息值<br/>　var f = document.user_info;<br/>　var userName = f.user_name.value;<br/>　var userAge = f.user_age.value;<br/>　var userSex = f.user_sex.value;<br/><br/>　//接收表单的URL地址<br/>　var url = &quot;/save_info.php&quot;;<br/><br/>　//需要POST的值，把每个变量都通过&amp;来联接<br/>　var postStr = &quot;user_name=&quot;+ userName +&quot;&amp;user_age=&quot;+ userAge +&quot;&amp;user_sex=&quot;+ userSex;<br/><br/>　//实例化Ajax<br/>　var ajax = InitAjax();<br/>　<br/>　//通过Post方式打开连接<br/>　ajax.open(&quot;POST&quot;, url, true); <br/><br/>　//定义传输的文件HTTP头信息<br/>　ajax.setRequestHeader(&quot;Content-Type&quot;,&quot;application/x-www-form-urlencoded&quot;); <br/><br/>　//发送POST数据<br/>　ajax.send(postStr);<br/><br/>　//获取执行状态<br/>　ajax.onreadystatechange = function() &#123; <br/>　　//如果执行状态成功，那么就把返回信息写到指定的层里<br/>　　if (ajax.readyState == 4 &amp;&amp; ajax.status == 200) &#123; <br/>　　　msg.innerHTML = ajax.responseText; <br/>　　&#125; <br/>　&#125; <br/>&#125;<br/><br/>大致使用POST方式的过程就是这样，当然，实际开发情况可能会更复杂，这就需要开发者去慢慢琢磨。<br/><br/>　　4. 异步回调（伪Ajax方式）<br/><br/>　　一般情况下，使用Get、Post方式的Ajax我们都能够解决目前问题，只是应用复杂程度，当然，在开发中我们也许会碰到无法使用Ajax的时候，但是我们又需要模拟Ajax的效果，那么就可以使用伪Ajax的方式来实现我们的需求。<br/><br/>　　伪Ajax大致原理就是说我们还是普通的表单提交，或者别的什么的，但是我们却是把提交的值目标是一个浮动框架，这样页面就不刷新了，但是呢，我们又需要看到我们的执行结果，当然可以使用JavaScript来模拟提示信息，但是，这不是真实的，所以我们就需要我们的执行结果来异步回调，告诉我们执行结果是怎么样的。<br/><br/>　　假设我们的需求是需要上传一张图片，并且，需要知道图片上传后的状态，比如，是否上传成功、文件格式是否正确、文件大小是否正确等等。那么我们就需要我们的目标窗口把执行结果返回来给我们的窗口，这样就能够顺利的模拟一次Ajax调用的过程。<br/><br/>　　以下代码稍微多一点， 并且涉及Smarty模板技术，如果不太了解，请阅读相关技术资料。<br/><br/>　　上传文件：upload.html<br/><br/>//上传表单，指定target属性为浮动框架iframe1<br/>&lt;form action=&quot;/upload.php&quot; method=&quot;post&quot; enctype=&quot;multipart/form-data&quot; name=&quot;upload_img&quot; target=&quot;iframe1&quot;&gt;<br/>选择要上传的图片：&lt;input type=&quot;file&quot; name=&quot;image&quot;&gt;&lt;br /&gt;<br/>&lt;input type=&quot;submit&quot; value=&quot;上传图片&quot;&gt;<br/>&lt;/form&gt;<br/>//显示提示信息的层<br/>&lt;div id=&quot;message&quot; style=&quot;display:none&quot;&gt;&lt;/div&gt;<br/><br/>//用来做目标窗口的浮动框架<br/>&lt;iframe name=&quot;iframe1&quot; width=&quot;0&quot; height=&quot;0&quot; scrolling=&quot;no&quot;&gt;&lt;/iframe&gt; <br/><br/>　　处理上传的PHP文件：upload.php<br/><br/><br/>upload.php:<br/><br/>&lt;?php <br/><br/>/* 定义常量 */<br/><br/>//定义允许上传的MIME格式<br/>define(&quot;UPLOAD_IMAGE_MIME&quot;, &quot;image/pjpeg,image/jpg,image/jpeg,image/gif,image/x-png,image/png&quot;); <br/>//图片允许大小，字节<br/>define(&quot;UPLOAD_IMAGE_SIZE&quot;, 102400);<br/>//图片大小用KB为单位来表示<br/>define(&quot;UPLOAD_IMAGE_SIZE_KB&quot;, 100); <br/>//图片上传的路径<br/>define(&quot;UPLOAD_IMAGE_PATH&quot;, &quot;./upload/&quot;); <br/><br/>//获取允许的图像格式<br/>$mime = explode(&quot;,&quot;, USER_FACE_MIME);<br/>$is_vaild = 0;<br/><br/>//遍历所有允许格式<br/>foreach ($mime as $type)<br/>&#123;<br/>　if ($_FILES[&quot;image&quot;][&quot;type&quot;] == $type)<br/>　&#123;<br/>　　$is_vaild = 1;<br/>　&#125;<br/>&#125;<br/><br/>//如果格式正确，并且没有超过大小就上传上去<br/>if ($is_vaild &amp;&amp; $_FILES[&quot;image&quot;][&quot;size&quot;]&lt;=USER_FACE_SIZE &amp;&amp; $_FILES[&quot;image&quot;][&quot;size&quot;]&gt;0)<br/>&#123;<br/>　if (move_uploaded_file($_FILES[&quot;image&quot;][&quot;tmp_name&quot;], USER_IMAGE_PATH . $_FILES[&quot;image&quot;][&quot;name&quot;])) <br/>　&#123;<br/>　　$upload_msg =&quot;上传图片成功！&quot;;<br/>　&#125; <br/>　else <br/>　&#123;<br/>　　$upload_msg = &quot;上传图片文件失败&quot;;<br/>　&#125;<br/>&#125;<br/>else<br/>&#123;<br/>　$upload_msg = &quot;上传图片失败，可能是文件超过&quot;. USER_FACE_SIZE_KB .&quot;KB、或者图片文件为空、或文件格式不正确&quot;;<br/>&#125;<br/><br/>//解析模板文件<br/>$smarty-&gt;assign(&quot;upload_msg&quot;, $upload_msg);<br/>$smarty-&gt;display(&quot;upload.tpl&quot;);<br/>?&gt;<br/><br/>模板文件：upload.tpl:<br/><br/>&#123;if $upload_msg != &quot;&quot;&#125;<br/>callbackMessage(&quot;&quot;); <br/><br/><br/>//回调的JavaScript函数，用来在父窗口显示信息<br/>function callbackMessage(msg)<br/>&#123;<br/>　//把父窗口显示消息的层打开<br/>　parent.document.getElementById(&quot;message&quot;).style.display = &quot;block&quot;;<br/>　//把本窗口获取的消息写上去<br/>　parent.document.getElementById(&quot;message&quot;).innerHTML = msg;<br/>　//并且设置为3秒后自动关闭父窗口的消息显示<br/>　setTimeout(&quot;parent.document.getElementById(&quot;message&quot;).style.display = &quot;none&quot;&quot;, 3000);<br/>&#125; <br/><br/>　使用异步回调的方式过程有点复杂，但是基本实现了Ajax、以及信息提示的功能，如果接受模板的信息提示比较多，那么还可以通过设置层的方式来处理，这个随机应变吧。 <br/><br/>　　[结束语]<br/><br/>　　这是一种非常良好的Web开发技术，虽然出现时间比较长，但是到现在才慢慢火起来，也希望带给Web开发界一次变革，让我们朝RIA（富客户端）的开发迈进，当然，任何东西有利也有弊端，如果过多的使用JavaScript，那么客户端将非常臃肿，不利于用户的浏览体验，如何在做到快速的亲前提下，还能够做到好的用户体验，这就需要Web开发者共同努力了。 <br/>Tags - <a href="http://www.zhanghaijun.com/tags/ajax/" rel="tag">ajax</a> , <a href="http://www.zhanghaijun.com/tags/php/" rel="tag">php</a>
]]>
</description>
</item><item>
<link>http://www.zhanghaijun.com/post//#blogcomment</link>
<title><![CDATA[[评论] AJAX技术在PHP开发中的简单应用(2)]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.zhanghaijun.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>