📄 xajax.inc.php
字号:
/** * Turns off decoding the input request args from UTF-8 (default behavior). */ function decodeUTF8InputOff() { $this->bDecodeUTF8Input = false; } /** * Tells the response object to convert special characters to HTML entities * automatically (only works if the mb_string extension is available). */ function outputEntitiesOn() { $this->bOutputEntities = true; } /** * Tells the response object to output special characters intact. (default * behavior). */ function outputEntitiesOff() { $this->bOutputEntities = false; } /** * Registers a PHP function or method to be callable through xajax in your * Javascript. If you want to register a function, pass in the name of that * function. If you want to register a static class method, pass in an * array like so: * <kbd>array("myFunctionName", "myClass", "myMethod")</kbd> * For an object instance method, use an object variable for the second * array element (and in PHP 4 make sure you put an & before the variable * to pass the object by reference). Note: the function name is what you * call via Javascript, so it can be anything as long as it doesn't * conflict with any other registered function name. * * <i>Usage:</i> <kbd>$xajax->registerFunction("myFunction");</kbd> * or: <kbd>$xajax->registerFunction(array("myFunctionName", &$myObject, "myMethod"));</kbd> * * @param mixed contains the function name or an object callback array * @param mixed request type (XAJAX_GET/XAJAX_POST) that should be used * for this function. Defaults to XAJAX_POST. */ function registerFunction($mFunction,$sRequestType=XAJAX_POST) { if (is_string($sRequestType)) { return $this->registerExternalFunction($mFunction, $sRequestType); } if (is_array($mFunction)) { $this->aFunctions[$mFunction[0]] = 1; $this->aFunctionRequestTypes[$mFunction[0]] = $sRequestType; $this->aObjects[$mFunction[0]] = array_slice($mFunction, 1); } else { $this->aFunctions[$mFunction] = 1; $this->aFunctionRequestTypes[$mFunction] = $sRequestType; } } /** * Registers a PHP function to be callable through xajax which is located * in some other file. If the function is requested the external file will * be included to define the function before the function is called. * * <i>Usage:</i> <kbd>$xajax->registerExternalFunction("myFunction","myFunction.inc.php",XAJAX_POST);</kbd> * * @param string contains the function name or an object callback array * ({@link xajax::registerFunction() see registerFunction} for * more info on object callback arrays) * @param string contains the path and filename of the include file * @param mixed the RequestType (XAJAX_GET/XAJAX_POST) that should be used * for this function. Defaults to XAJAX_POST. */ function registerExternalFunction($mFunction,$sIncludeFile,$sRequestType=XAJAX_POST) { $this->registerFunction($mFunction, $sRequestType); if (is_array($mFunction)) { $this->aFunctionIncludeFiles[$mFunction[0]] = $sIncludeFile; } else { $this->aFunctionIncludeFiles[$mFunction] = $sIncludeFile; } } /** * Registers a PHP function to be called when xajax cannot find the * function being called via Javascript. Because this is technically * impossible when using "wrapped" functions, the catch-all feature is * only useful when you're directly using the xajax.call() Javascript * method. Use the catch-all feature when you want more dynamic ability to * intercept unknown calls and handle them in a custom way. * * <i>Usage:</i> <kbd>$xajax->registerCatchAllFunction("myCatchAllFunction");</kbd> * * @param string contains the function name or an object callback array * ({@link xajax::registerFunction() see registerFunction} for * more info on object callback arrays) */ function registerCatchAllFunction($mFunction) { if (is_array($mFunction)) { $this->sCatchAllFunction = $mFunction[0]; $this->aObjects[$mFunction[0]] = array_slice($mFunction, 1); } else { $this->sCatchAllFunction = $mFunction; } } /** * Registers a PHP function to be called before xajax calls the requested * function. xajax will automatically add the request function's response * to the pre-function's response to create a single response. Another * feature is the ability to return not just a response, but an array with * the first element being false (a boolean) and the second being the * response. In this case, the pre-function's response will be returned to * the browser without xajax calling the requested function. * * <i>Usage:</i> <kbd>$xajax->registerPreFunction("myPreFunction");</kbd> * * @param string contains the function name or an object callback array * ({@link xajax::registerFunction() see registerFunction} for * more info on object callback arrays) */ function registerPreFunction($mFunction) { if (is_array($mFunction)) { $this->sPreFunction = $mFunction[0]; $this->aObjects[$mFunction[0]] = array_slice($mFunction, 1); } else { $this->sPreFunction = $mFunction; } } /** * Returns true if xajax can process the request, false if otherwise. * You can use this to determine if xajax needs to process the request or * not. * * @return boolean */ function canProcessRequests() { if ($this->getRequestMode() != -1) return true; return false; } /** * Returns the current request mode (XAJAX_GET or XAJAX_POST), or -1 if * there is none. * * @return mixed */ function getRequestMode() { if (!empty($_GET["xajax"])) return XAJAX_GET; if (!empty($_POST["xajax"])) return XAJAX_POST; return -1; } function processRequest() { return $this->processRequests(); } /** * This is the main communications engine of xajax. The engine handles all * incoming xajax requests, calls the apporiate PHP functions (or * class/object methods) and passes the XML responses back to the * Javascript response handler. If your RequestURI is the same as your Web * page then this function should be called before any headers or HTML has * been sent. */ function processRequests() { $requestMode = -1; $sFunctionName = ""; $bFoundFunction = true; $bFunctionIsCatchAll = false; $sFunctionNameForSpecial = ""; $aArgs = array(); $sPreResponse = ""; $bEndRequest = false; $requestMode = $this->getRequestMode(); if ($requestMode == -1) return; if ($requestMode == XAJAX_POST) { $sFunctionName = $_POST["xajax"]; if (!empty($_POST["xajaxargs"])) $aArgs = $_POST["xajaxargs"]; } else { header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); header ("Cache-Control: no-cache, must-revalidate"); header ("Pragma: no-cache"); $sFunctionName = $_GET["xajax"]; if (!empty($_GET["xajaxargs"])) $aArgs = $_GET["xajaxargs"]; } // Use xajax error handler if necessary if ($this->bErrorHandler) { $GLOBALS['xajaxErrorHandlerText'] = ""; set_error_handler("xajaxErrorHandler"); } if ($this->sPreFunction) { if (!$this->_isFunctionCallable($this->sPreFunction)) { $bFoundFunction = false; $oResponse = new xajaxResponse(); $oResponse->addAlert("Unknown Pre-Function ". $this->sPreFunction); } } //include any external dependencies associated with this function name if (array_key_exists($sFunctionName,$this->aFunctionIncludeFiles)) { ob_start(); include_once($this->aFunctionIncludeFiles[$sFunctionName]); ob_end_clean(); } if ($bFoundFunction) { $sFunctionNameForSpecial = $sFunctionName; if (!array_key_exists($sFunctionName, $this->aFunctions)) { if ($this->sCatchAllFunction) { $sFunctionName = $this->sCatchAllFunction; $bFunctionIsCatchAll = true; } else { $bFoundFunction = false; $oResponse = new xajaxResponse(); $oResponse->addAlert("Unknown Function $sFunctionName."); } } } if ($bFoundFunction) { for ($i = 0; $i < sizeof($aArgs); $i++) { // If magic quotes is on, then we need to strip the slashes from the args if (get_magic_quotes_gpc() == 1 && is_string($aArgs[$i])) { $aArgs[$i] = stripslashes($aArgs[$i]); } if (stristr($aArgs[$i],"<xjxobj>") != false) { $aArgs[$i] = $this->_xmlToArray("xjxobj",$aArgs[$i]); } else if (stristr($aArgs[$i],"<xjxquery>") != false) { $aArgs[$i] = $this->_xmlToArray("xjxquery",$aArgs[$i]); } else if ($this->bDecodeUTF8Input) { $aArgs[$i] = $this->_decodeUTF8Data($aArgs[$i]); } } if ($this->sPreFunction) { $mPreResponse = $this->_callFunction($this->sPreFunction, array($sFunctionNameForSpecial, $aArgs)); if (is_array($mPreResponse) && $mPreResponse[0] === false) { $bEndRequest = true; $sPreResponse = $mPreResponse[1]; } else { $sPreResponse = $mPreResponse; } if ($bEndRequest) $oResponse = $sPreResponse; } if (!$bEndRequest) { if (!$this->_isFunctionCallable($sFunctionName)) { $oResponse = new xajaxResponse(); $oResponse->addAlert("The Registered Function $sFunctionName Could Not Be Found."); } else { if ($bFunctionIsCatchAll) { $aArgs = array($sFunctionNameForSpecial, $aArgs); } $oResponse = $this->_callFunction($sFunctionName, $aArgs); } if (is_string($sResponse)) { $oResponse = new xajaxResponse(); $oResponse->addAlert("No XML Response Was Returned By Function $sFunctionName.\n\nOutput: ".$oResponse); } else if ($sPreResponse != "") { $oNewResponse = new xajaxResponse($this->sEncoding, $this->bOutputEntities); $oNewResponse->loadXML($sPreResponse); $oNewResponse->loadXML($oResponse); $oResponse = $sNewResponse; } } } $sContentHeader = "Content-type: text/xml;"; if ($this->sEncoding && strlen(trim($this->sEncoding)) > 0) $sContentHeader .= " charset=".$this->sEncoding; header($sContentHeader); if ($this->bErrorHandler && !empty( $GLOBALS['xajaxErrorHandlerText'] )) { $oErrorResponse = new xajaxResponse(); $oErrorResponse->addAlert("** PHP Error Messages: **" . $GLOBALS['xajaxErrorHandlerText']); if ($this->sLogFile) { $fH = @fopen($this->sLogFile, "a"); if (!$fH) { $oErrorResponse->addAlert("** Logging Error **\n\nxajax was unable to write to the error log file:\n" . $this->sLogFile); } else { fwrite($fH, "** xajax Error Log - " . strftime("%b %e %Y %I:%M:%S %p") . " **" . $GLOBALS['xajaxErrorHandlerText'] . "\n\n\n"); fclose($fH); } } $oErrorResponse->loadXML($oResponse); $oResponse = $oErrorResponse; } if ($this->bCleanBuffer) while (@ob_end_clean()); print $oResponse->getOutput(); if ($this->bErrorHandler) restore_error_handler(); if ($this->bExitAllowed) exit(); } /** * Prints the xajax Javascript header and wrapper code into your page by * printing the output of the getJavascript() method. It should only be * called between the <pre><head> </head></pre> tags in your HTML page. * Remember, if you only want to obtain the result of this function, use * {@link xajax::getJavascript()} instead. * * <i>Usage:</i> * <code> * <head> * ... * < ?php $xajax->printJavascript(); ? > * </code> * * @param string the relative address of the folder where xajax has been * installed. For instance, if your PHP file is * "http://www.myserver.com/myfolder/mypage.php" * and xajax was installed in * "http://www.myserver.com/anotherfolder", then $sJsURI * should be set to "../anotherfolder". Defaults to assuming * xajax is in the same folder as your PHP file. * @param string the relative folder/file pair of the xajax Javascript * engine located within the xajax installation folder. * Defaults to xajax_js/xajax.js. */ function printJavascript($sJsURI="", $sJsFile=NULL) { print $this->getJavascript($sJsURI, $sJsFile); } /** * Returns the xajax Javascript code that should be added to your HTML page * between the <kbd><head> </head></kbd> tags. * * <i>Usage:</i> * <code> * < ?php $xajaxJSHead = $xajax->getJavascript(); ? > * <head> * ... * < ?php echo $xajaxJSHead; ? > * </code> * * @param string the relative address of the folder where xajax has been * installed. For instance, if your PHP file is * "http://www.myserver.com/myfolder/mypage.php" * and xajax was installed in * "http://www.myserver.com/anotherfolder", then $sJsURI * should be set to "../anotherfolder". Defaults to assuming * xajax is in the same folder as your PHP file. * @param string the relative folder/file pair of the xajax Javascript * engine located within the xajax installation folder. * Defaults to xajax_js/xajax.js. * @return string */ function getJavascript($sJsURI="", $sJsFile=NULL) { $html = $this->getJavascriptConfig(); $html .= $this->getJavascriptInclude($sJsURI, $sJsFile); return $html; } /** * Returns a string containing inline Javascript that sets up the xajax * runtime (typically called internally by xajax from get/printJavascript). * * @return string */ function getJavascriptConfig() { $html = "\t<script type=\"text/javascript\">\n"; $html .= "var xajaxRequestUri=\"".$this->sRequestURI."\";\n"; $html .= "var xajaxDebug=".($this->bDebug?"true":"false").";\n"; $html .= "var xajaxStatusMessages=".($this->bStatusMessages?"true":"false").";\n"; $html .= "var xajaxWaitCursor=".($this->bWaitCursor?"true":"false").";\n"; $html .= "var xajaxDefinedGet=".XAJAX_GET.";\n"; $html .= "var xajaxDefinedPost=".XAJAX_POST.";\n"; $html .= "var xajaxLoaded=false;\n"; foreach($this->aFunctions as $sFunction => $bExists) { $html .= $this->_wrap($sFunction,$this->aFunctionRequestTypes[$sFunction]); } $html .= "\t</script>\n"; return $html; } /** * Returns a string containing a Javascript include of the xajax.js file * along with a check to see if the file loaded after six seconds * (typically called internally by xajax from get/printJavascript). * * @param string the relative address of the folder where xajax has been * installed. For instance, if your PHP file is * "http://www.myserver.com/myfolder/mypage.php" * and xajax was installed in * "http://www.myserver.com/anotherfolder", then $sJsURI * should be set to "../anotherfolder". Defaults to assuming * xajax is in the same folder as your PHP file. * @param string the relative folder/file pair of the xajax Javascript * engine located within the xajax installation folder.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -