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

<channel>
	<title>潘锦的空间 &#187; Ajax原理</title>
	<atom:link href="https://www.phppan.com/tag/ajax%e5%8e%9f%e7%90%86/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.phppan.com</link>
	<description>SaaS SaaS架构 团队管理 技术管理 技术架构 PHP 内核 扩展 项目管理</description>
	<lastBuildDate>Sat, 25 Apr 2026 00:56:17 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.9.40</generator>
	<item>
		<title>Ajax总结</title>
		<link>https://www.phppan.com/2009/09/ajax-summary/</link>
		<comments>https://www.phppan.com/2009/09/ajax-summary/#comments</comments>
		<pubDate>Sat, 26 Sep 2009 07:08:35 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[程序相关]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Ajax原理]]></category>
		<category><![CDATA[Ajax实例]]></category>
		<category><![CDATA[Ajax的优点]]></category>
		<category><![CDATA[Ajax的名称]]></category>
		<category><![CDATA[Ajax的缺点]]></category>

		<guid isPermaLink="false">http://www.phppan.com/?p=237</guid>
		<description><![CDATA[在工作中用了Ajax N多次了，也看过一些相关方面的书籍，也算是认识了它，但是一直没有认真总结和整理过相关的东 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>在工作中用了Ajax N多次了，也看过一些相关方面的书籍，也算是认识了它，但是一直没有认真总结和整理过相关的东东，失败！<br />
近有闲情，将之总结如下：</p>
<p>【名称】<br />
Ajax是Asynchronous JavaScript and XML(以及 DHTML 等)的缩写。<br />
详情请移步Ajax: A New Approach to Web Applications</p>
<p>【原理】<br />
简单一些，就是通过使用XmlHttpRequest对象向服务器发送异步请求，获取返回的数据，并使用Javascript和DOM操作页面内的元素，从而达到改变页面内容的目的。<br />
其中XmlHttpRequest对象是关键，因为它支持异步请求。XMLHttpRequest是完全用来向服务器发出一个请求的。它所包含的方法和属性如下所示：<br />
方法：<br />
●abort() 导致当前正在请求被取消<br />
●getAllResponseHeaders() 返回一个字符串，包含氖 响应标头的名称和值<br />
●getResponseHeader(name) 返回指定的响应标头的值<br />
●open(method, url, async, username, password) 设置请求的方法和目标URL。请求可以声明为同步的（可选），也可以给需要基于窗口谁的请求而提供用户名和口令（可选）<br />
●send(content) 发起带有指定内容（可选）的请求<br />
●setRequestHeader(name, value) 利用指定的名称和值，设置一个请求标头</p>
<p>属性：<br />
●onreadystatechange 指派在请求的状态发生变化时所使用的事件处理程序<br />
●readyState 一个整数值，指示请求的状态如下：<br />
0&#8212;-未初始化<br />
1&#8212;-正在加载<br />
2&#8212;-已加载<br />
3&#8212;-交互<br />
4&#8212;&#8211;完成<br />
●responseText 在响应里所返回的内容<br />
●responseXML 如果内容是XML，就根据内容而创建XML DOM<br />
●status 从服务器所返回的响应状态码。例如：200表示成功，404表示未找到，参考HTTP规范<br />
●statusText 响应所返回的状态文本消息</p>
<p>对于此对象其它介绍请移步：<a href="http://ajava.org/readbook/AJAX/ria/10571.html">XMLHttpRequest概述</a></p>
<p>【所包含的技术】<br />
·  基于XHTML和CSS标准的表示；<br />
·  使用Document Object Model进行动态显示和交互；<br />
·  使用XMLHttpRequest与服务器进行异步通信；<br />
·  使用JavaScript绑定一切；<br />
·  使用XML和XSLT;交换和操作数据。<br />
以上的技术都是一些广泛使用了的技术，都属于比较旧的技术，ajax是这几种技术的结合体。</p>
<p>【简单实例】</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="html" style="font-family:monospace;">&nbsp;
    &lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;&lt;/title&gt;
        &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;
        &lt;script type=&quot;text/javascript&quot;&gt;
            function ajax() {
                var xmlHttp;
				//	 依据对象判断，而不是依据浏览器
                if(window.XMLHttpRequest)                {
                    xmlHttp=new XMLHttpRequest();//mozilla浏览器
                }else if(window.ActiveXObject){
                    try{
                        xmlHttp=new ActiveXObject(&quot;Msxmlx2.XMLHTTP&quot;);   //IE老版本
                    }catch(e){}
                    try{
                        xmlHttp=new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;); //IE新版本
                    }catch(e){}
&nbsp;
                    if(!xmlHttp){
                        window.alert(&quot;不能创建XMLHttpRequest对象实列&quot;);
                        return false;
                    }
                }
&nbsp;
                if (!xmlHttp) {
                    alert(&quot;创建XMLHttpRequest对象失败！&quot;);
                    return false;
                }
&nbsp;
                xmlHttp.open('POST', 'index.php?get_a=2&amp;get_b=3', false);
     xmlHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded;charset=UTF-8;');
                xmlHttp.send(&quot;post_a=1&amp;post_b=2&quot;);
                xmlHttp.onreadystatechange = function() {
                    alert(xmlHttp.readyState);
                }
                if(xmlHttp.readyState == 4){    //判断对象状态
                    var content_obj = document.getElementById(&quot;content&quot;);
                    content_obj.innerHTML = &quot;正在处理数据...&quot;;
                    if(xmlHttp.status == 200){  //信息已经成功返回，开始处理信息
                        var returnStr = xmlHttp.responseText;
                        content_obj.innerHTML =  returnStr;
                    }else{  //页面不正常
                        content_obj.innerHTML = &quot;您所请求的页面存在异常！&quot;;
                    }
                }
            }
&nbsp;
&nbsp;
        &lt;/script&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;input type=&quot;button&quot; value=&quot;ajax&quot; onclick=&quot;ajax();&quot; /&gt;
        &lt;div id=&quot;content&quot;&gt;ajax内容显示区&lt;/div&gt;
    &lt;/body&gt;
&lt;/html&gt;</pre></td></tr></table></div>

<p>切记：当发起一个POST请求时，需要对报头 Content-type（内容类型）进行设置。这样，服务器就知道如何来处理上传的内容。如果要模拟通过HTTP协议的POST方式来发送表单，则应将内容类型设置为application/x-www-form-urlencoded。</p>
<p>【优点】</p>
<p>●页面无刷新，用户体验好；<br />
●异步，不打断用户操作，响应速度快；<br />
●“按需取数据”，减少冗余请求，减轻服务器负担；<br />
●基于标准化的并被广泛支持的技术，无需额外的插件；<br />
●可以使数据和表现分离；</p>
<p>【存在的问题】<br />
●一些设备还不支持<br />
●开发成本提高<br />
●使back按钮失效，用户操作后无法返回；<br />
●对流媒体支持没有flash之流好；<br />
●对搜索引擎不友好<br />
●破坏程序的异常机制<br />
●存在一些安全问题，暴露了一些程序接口和数据逻辑</p>
]]></content:encoded>
			<wfw:commentRss>https://www.phppan.com/2009/09/ajax-summary/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
