ajax 刷新错误

vivihewitt 2010-10-20 04:38:58
我用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);
}



...全文
72 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
f2i2t2e2r 2010-10-21
  • 打赏
  • 举报
回复
jquery 的ajax的确强大 有兴趣你可以研究下
  • 打赏
  • 举报
回复
建议用jQuery的Ajax,相当方便!
Mr-Jee 2010-10-20
  • 打赏
  • 举报
回复
应该是逻辑问题,建议移到php版块·
Go 旅城通票 2010-10-20
  • 打赏
  • 举报
回复

贴出你php返回的xml字符串,如果是js去不到xml中的值的话可以帮你解决下

如果是你php关系没整理好,没返回正确的xml什么的这个就帮补到了,木知道这么深的php。。。

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧