?? xajax.inc.php
字號:
* * <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; } /** * 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; $sResponse = ""; $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; $objResponse = new xajaxResponse(); $objResponse->addAlert("Unknown Pre-Function ". $this->sPreFunction); $sResponse = $objResponse->getXML(); } } //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; $objResponse = new xajaxResponse(); $objResponse->addAlert("Unknown Function $sFunctionName."); $sResponse = $objResponse->getXML(); } } else if ($this->aFunctionRequestTypes[$sFunctionName] != $requestMode) { $bFoundFunction = false; $objResponse = new xajaxResponse(); $objResponse->addAlert("Incorrect Request Type."); $sResponse = $objResponse->getXML(); } } 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 (is_a($sPreResponse, "xajaxResponse")) { $sPreResponse = $sPreResponse->getXML(); } if ($bEndRequest) $sResponse = $sPreResponse; } if (!$bEndRequest) { if (!$this->_isFunctionCallable($sFunctionName)) { $objResponse = new xajaxResponse(); $objResponse->addAlert("The Registered Function $sFunctionName Could Not Be Found."); $sResponse = $objResponse->getXML(); } else { if ($bFunctionIsCatchAll) { $aArgs = array($sFunctionNameForSpecial, $aArgs); } $sResponse = $this->_callFunction($sFunctionName, $aArgs); } if (is_a($sResponse, "xajaxResponse")) { $sResponse = $sResponse->getXML(); } if (!is_string($sResponse) || strpos($sResponse, "<xjx>") === FALSE) { $objResponse = new xajaxResponse(); $objResponse->addAlert("No XML Response Was Returned By Function $sFunctionName."); $sResponse = $objResponse->getXML(); } else if ($sPreResponse != "") { $sNewResponse = new xajaxResponse($this->sEncoding, $this->bOutputEntities); $sNewResponse->loadXML($sPreResponse); $sNewResponse->loadXML($sResponse); $sResponse = $sNewResponse->getXML(); } } } $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'] )) { $sErrorResponse = new xajaxResponse(); $sErrorResponse->addAlert("** PHP Error Messages: **" . $GLOBALS['xajaxErrorHandlerText']); if ($this->sLogFile) { $fH = @fopen($this->sLogFile, "a"); if (!$fH) { $sErrorResponse->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); } } $sErrorResponse->loadXML($sResponse); $sResponse = $sErrorResponse->getXML(); } if ($this->bCleanBuffer) while (@ob_end_clean()); print $sResponse; 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($additionalRequestURI=false) { $html = "\t<script type=\"text/javascript\">\n"; $html .= "<!--\n"; $html .= "var ".$this->sWrapperPrefix."RequestUri=\"".$this->sRequestURI."\";\n"; if(!$additionalRequestURI){ $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 .= "//-->\n"; $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. * Defaults to xajax_js/xajax.js. * @return string */ function getJavascriptInclude($sJsURI="", $sJsFile=NULL) { if ($sJsFile == NULL) $sJsFile = "xajax_js/xajax.js"; if ($sJsURI != "" && substr($sJsURI, -1) != "/") $sJsURI .= "/"; $html = "\t<script type=\"text/javascript\" src=\"" . $sJsURI . $sJsFile . "\"></script>\n"; $html .= "\t<script type=\"text/javascript\">\n"; $html .= "window.setTimeout(function () { if (!xajaxLoaded) { alert('Error: the xajax Javascript file could not be included. Perhaps the URL is incorrect?\\nURL: {$sJsURI}{$sJsFile}'); } }, 6000);\n"; $html .= "\t</script>\n"; return $html; } /** * This method can be used to create a new xajax.js file out of the * xajax_uncompressed.js file (which will only happen if xajax.js doesn't * already exist on the filesystem).
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -