我用PHP把javascript封成了一下这个类,但是当两个AjaxNode对象有包含关系的时候,内层那个不能正确的刷新,研究了一天了 不知道为什么
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);
}

解决方案 »

  1.   


    贴出你php返回的xml字符串,如果是js去不到xml中的值的话可以帮你解决下如果是你php关系没整理好,没返回正确的xml什么的这个就帮补到了,木知道这么深的php
      

  2.   

    应该是逻辑问题,建议移到php版块·
      

  3.   

    建议用jQuery的Ajax,相当方便!
      

  4.   

    jquery 的ajax的确强大   有兴趣你可以研究下