21,886
社区成员
发帖
与我相关
我的任务
分享
class AjaxNode extends NodeContainer {
/**
* The container div
* @var PageElement
*/
public $containerDIV;
/**
* The ID of the container DIV
* @var String
*/
public $containerID;
/**
*
* @param <type> $parent
* @param <type> $ajaxURL
* @param <type> $ajaxOnLoad
*/
function __construct($parent, $ajaxURL = null, $ajaxOnLoad = true, $loadingText = null, $delayInterval = null, $autoRefresh = false) {
parent::__construct($parent);
new Script($this, "text/javascript", "/includes/htmlTree/classes/Element/AjaxNode.class.php?include=javascript");
$this->containerID = md5(uniqid(mt_rand(), true));
$this->containerDIV = new PageElement($this, "div", $loadingText);
$this->containerDIV->setID($this->containerID);
$this->containerDIV->addAttribute("ajaxurl", $ajaxURL);
$this->containerDIV->forceEndTag();
if($ajaxOnLoad){
$autoLoadScript = new Script($this, "text/javascript");
if($delayInterval == null){
$autoLoadScript->contentText = $this->getTriggerJavacript();
}
else{
if($autoRefresh){
$autoLoadScript->contentText = "var ajaxNode" . $this->containerID . "Refresher = window.setInterval(\"". $this->getTriggerJavacript(). "\", $delayInterval);";
}
else{
$autoLoadScript->contentText = "var ajaxNode" . $this->containerID . "Loader = window.setTimeout(\"". $this->getTriggerJavacript(). "\", $delayInterval);";
}
}
}
}
public function getTriggerJavacript(){
return "loadAJAXHTMLNodeContent('$this->containerID');";
}
}
function loadAJAXHTMLNodeContent(ajaxNodeID){
var ajaxHTMLNodeRequester = null;
try{
// Firefox, Opera 8.0+, Safari
ajaxHTMLNodeRequester = new XMLHttpRequest();
}
catch(e){
// Internet Explorer
try{
ajaxHTMLNodeRequester = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e){
ajaxHTMLNodeRequester = new ActiveXObject("Microsoft.XMLHTTP");
}
}
var ajaxHTMLNodeURL = document.getElementById(ajaxNodeID).getAttribute('ajaxurl');
ajaxHTMLNodeRequester.open('GET', ajaxHTMLNodeURL, true);
ajaxHTMLNodeRequester.onreadystatechange = function(){
if(ajaxHTMLNodeRequester.readyState == 4){
if(ajaxHTMLNodeRequester.status == 200) {
document.getElementById(ajaxNodeID).innerHTML = ajaxHTMLNodeRequester.responseText;
var forcedXML = "<root>" + ajaxHTMLNodeRequester.responseText + "</root>";
if(window.DOMParser){
parser=new DOMParser();
xmlDoc=parser.parseFromString(forcedXML,"text/xml");
}
else{
// Internet Explorer
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.loadXML(forcedXML);
}
var scriptTags = xmlDoc.getElementsByTagName("script");
var scriptTagCount = scriptTags.length;
if(scriptTagCount > 0){
var i = 0;
for(i = 0; i < scriptTagCount; i++){
if(scriptTags[i].getAttribute('src') == null || scriptTags[i].getAttribute('src') == ''){
eval(scriptTags[i].childNodes[0].nodeValue);
}
else{
var newScriptTag = document.createElement("script");
newScriptTag.setAttribute("src", scriptTags[i].getAttribute('src'));
document.getElementById(ajaxNodeID).appendChild(newScriptTag);
}
}
}
var linkTags = xmlDoc.getElementsByTagName("link");
var linkTagsCount = linkTags.length;
if(linkTagsCount > 0){
var i = 0;
for(i = 0; i < linkTagsCount; i++){
if(linkTags[i].getAttribute('href') == null || linkTags[i].getAttribute('href') == ''){
//donothing
}
else{
var newLinkTag = document.createElement("link");
newLinkTag.setAttribute("rel", linkTags[i].getAttribute('rel'));
newLinkTag.setAttribute("href", linkTags[i].getAttribute('href'));
document.getElementById(ajaxNodeID).appendChild(newLinkTag);
}
}
}
var styleTags = xmlDoc.getElementsByTagName("style");
var styleTagsCount = styleTags.length;
if(styleTagsCount > 0){
var i = 0;
for(i = 0; i < styleTagsCount; i++){
var newSyleTag = document.createElement("style");
var styleCode = document.createTextNode(styleTags[i].childNodes[0].nodeValue);
newSyleTag.type = "text/css";
if(newSyleTag.styleSheet){
newSyleTag.styleSheet.cssText = styleCode.nodeValue;
}
else{
newSyleTag.appendChild(styleCode);
}
document.getElementById(ajaxNodeID).appendChild(newSyleTag);
}
}
}
else{
document.getElementById(ajaxNodeID).innerHTML = "Error code " + ajaxHTMLNodeRequester.status + " in loadAJAXHTMLNodeContent('" + ajaxNodeID + "'')";
}
}
};
ajaxHTMLNodeRequester.send(null);
}