深圳全飞鸿
标题:
xajax的源码分析
[打印本页]
作者:
zhgc
时间:
2020-1-2 18:20
标题:
xajax的源码分析
xajax.prepareRequest函数的入口
URI:"/basicajax.php?XDEBUG_SESSION_START=d4p&XDEBUG_PROFILE_STOP=1&restore_session=1"
callback:{timers: {…}, onRequest: null, onResponseDelay: null, onExpiration: null, beforeResponseProcessing: null, …}
commonHeaders:{If-Modified-Since: "Sat, 1 Jan 2000 00:00:00 GMT"}
contentType:"application/x-www-form-urlencoded"
context:Window {postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, frames: Window, …}
cursor:{onWaiting: ƒ, onComplete: ƒ}
functionName:{xjxfun: "ajaxProcess"}
getHeaders:{}
httpVersion:"HTTP/1.1"
maxObjectDepth:20
maxObjectSize:2000
method:"POST"
mode:"asynchronous"
parameters:Arguments(6) ["Index", "Button1", null, "Button1Click", {…}, Array(0), callee: ƒ, Symbol(Symbol.iterator): ƒ]
postHeaders:{content-type: "application/x-www-form-urlencoded"}
requestData:"xjxfun=ajaxProcess&xjxr=1577959851647&xjxargs[]=SIndex&xjxargs[]=SButton1&xjxargs[]=*&xjxargs[]=SButton1Click&xjxargs[]=%3Cxjxobj%3E%3Ce%3E%3Ck%3Eserverevent%3C%2Fk%3E%3Cv%3ES%3C%2Fv%3E%3C%2Fe%3E%3Ce%3E%3Ck%3Eserverparams%3C%2Fk%3E%3Cv%3ES%3C%2Fv%3E%3C%2Fe%3E%3Ce%3E%3Ck%3EButton1%3C%2Fk%3E%3Cv%3ES%3C!%5BCDATA%5Bclicked%20Ajax%202020-01-02%209%3A21%3A16%20am%5D%5D%3E%3C%2Fv%3E%3C%2Fe%3E%3C%2Fxjxobj%3E&xjxargs[]=%3Cxjxobj%3E%3C%2Fxjxobj%3E"
requestRetry:4
requestURI:"/basicajax.php?XDEBUG_SESSION_START=d4p&XDEBUG_PROFILE_STOP=1&restore_session=1"
retry:5
returnValue:false
status:{onRequest: ƒ, onWaiting: ƒ, onProcessing: ƒ, onComplete: ƒ}
statusMessages:false
waitCursor:true
__proto__:Object
xajax.prepareRequest函数的出口
作者:
zhgc
时间:
2020-1-23 00:49
简单的ajax的触发过程如下:
/* <![CDATA[ */
xajax_ajaxProcess = function() { return xajax.request( { xjxfun: 'ajaxProcess' }, { parameters: arguments } ); };
/* ]]> */
function Button1JSClick(event)
{
var event = event || window.event;
var params=null;
xajax_ajaxProcess('Index','Button1',params,'Button1Click',xajax.getFormValues('Index'),[]);
//Return false to prevent the button submit the form
return(false);
}
作者:
zhgc
时间:
2020-1-29 16:41
在inernalSend时,多了以下几个属性:
applyRequestHeaders:ƒ ()
finishRequest:ƒ ()
open:ƒ ()
request:XMLHttpRequest {onreadystatechange: ƒ, readyState: 1, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, …}
setCommonRequestHeaders:ƒ ()
setGetRequestHeaders:ƒ ()
setPostRequestHeaders:ƒ ()
setRequestHeaders:ƒ (headers)
作者:
zhgc
时间:
2020-1-29 17:26
ajax
ajax-yl.png
(9.06 KB, 下载次数: 913)
下载附件
2020-1-29 17:25 上传
作者:
zhgc
时间:
2020-1-29 17:33
为了应对所有的现代浏览器,包括 IE5 和 IE6,请检查浏览器是否支持 XMLHttpRequest 对象。如果支持,则创建 XMLHttpRequest 对象。如果不支持,则创建 ActiveXObject :
实例
var xmlhttp;
if (window.XMLHttpRequest)
{
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xmlhttp=new XMLHttpRequest();
}
else
{
// IE6, IE5 浏览器执行代码
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
复制代码
作者:
zhgc
时间:
2020-1-29 17:39
简单范例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script>
function loadXMLDoc()
{
var xmlhttp;
if (window.XMLHttpRequest)
{
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xmlhttp=new XMLHttpRequest();
}
else
{
// IE6, IE5 浏览器执行代码
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","/try/ajax/ajax_info.txt",true);
xmlhttp.send();
}
</script>
</head>
<body>
<div id="myDiv"><h2>使用 AJAX 修改该文本内容</h2></div>
<button type="button" onclick="loadXMLDoc()">修改内容</button>
</body>
</html>
复制代码
作者:
zhgc
时间:
2020-1-29 20:55
if ('undefined' != typeof oRequest.userName && 'undefined' != typeof oRequest.password) {
oRequest.open = function() {
this.request.open(this.method, this.requestURI, 'asynchronous' == this.mode, oRequest.userName, oRequest.password);
}
} else {
oRequest.open = function() {
this.request.open(this.method, this.requestURI, 'asynchronous' == this.mode);
}
}
作者:
zhgc
时间:
2020-1-29 21:13
xjxfun=ajaxProcess&xjxr=1577959851647&xjxargs[]=SIndex&xjxargs[]=SButton1&xjxargs[]=*&xjxargs[]=SButton1Click&xjxargs[]=%3Cxjxobj%3E%3Ce%3E%3Ck%3Eserverevent%3C%2Fk%3E%3Cv%3ES%3C%2Fv%3E%3C%2Fe%3E%3Ce%3E%3Ck%3Eserverparams%3C%2Fk%3E%3Cv%3ES%3C%2Fv%3E%3C%2Fe%3E%3Ce%3E%3Ck%3EButton1%3C%2Fk%3E%3Cv%3ES%3C!%5BCDATA%5Bclicked%20Ajax%202020-01-02%209%3A21%3A16%20am%5D%5D%3E%3C%2Fv%3E%3C%2Fe%3E%3C%2Fxjxobj%3E&xjxargs[]=%3Cxjxobj%3E%3C%2Fxjxobj%3E
在
http://www.jsons.cn/urlencode/
解码后得到:
xjxfun=ajaxProcess&xjxr=1577959851647&xjxargs[]=SIndex&xjxargs[]=SButton1&xjxargs[]=*&xjxargs[]=SButton1Click&xjxargs[]=<xjxobj><e><k>serverevent</k><v>S</v></e><e><k>serverparams</k><v>S</v></e><e><k>Button1</k><v>S<![CDATA[clicked Ajax 2020-01-02 9:21:16 am]]></v></e></xjxobj>&xjxargs[]=<xjxobj></xjxobj>
格式化后是:
xjxfun=ajaxProcess
&xjxr=1577959851647
&xjxargs[]=SIndex
&xjxargs[]=SButton1
&xjxargs[]=*
&xjxargs[]=SButton1Click
&xjxargs[]=<xjxobj><e><k>serverevent</k><v>S</v></e><e><k>serverparams</k><v>S</v></e><e><k>Button1</k><v>S<![CDATA[clicked Ajax 2020-01-02 9:21:16 am]]></v></e></xjxobj>
&xjxargs[]=<xjxobj></xjxobj>
这个类似xml的内容:
<xjxobj>
<e>
<k>serverevent</k>
<v>S</v>
</e>
<e>
<k>serverparams</k>
<v>S</v>
</e>
<e>
<k>Button1</k>
<v>S<![CDATA[clicked Ajax 2020-01-02 9:21:16 am]]></v>
</e>
</xjxobj>
作者:
zhgc
时间:
2020-1-29 21:36
ajax把requestData发送到后台,后台是如何处理的?
看requestData的xjxargs属性,搜索xjxargs后发现在File: xajaxArgumentManager.inc.php
而xajaxArgumentManager.inc.php是被文件File: xajax.inc.php引用的
而xajax.inc的引用,如下:
/**
* This method is called to setup the Ajax functionality when dumping Page code
*
* When generating the page code, if ajax support is enabled, this method dumps
* the right code to create the xajax object, setup xajax debug support if required
* and to register the processing function for ajax requests as ajaxProcess(), and
* finally, processes all the incomming ajax requests
*
* @see getUseAjaxDebug(), getUseAjax()
*/
function processAjax()
{
if (($this->ControlState & csDesigning) != csDesigning)
{
use_unit("xajax/xajax_core/xajax.inc.php");
//AJAX support
global $xajax;
$xajaxuri=$_SERVER['REQUEST_URI'];
if ($this->UseAjaxUri!='') $xajaxuri=$this->UseAjaxUri;
复制代码
欢迎光临 深圳全飞鸿 (http://www.nagomes.com/disc/)
Powered by Discuz! X3.2