Welcome! Log In Create A New Profile

Advanced

[PHP] Pure PHP Templating Class/AJAX Problem

Posted by Tom Shaw 
Tom Shaw
[PHP] Pure PHP Templating Class/AJAX Problem
October 13, 2008 11:05PM
I use a pure templating class similar to something that I found here
http://www.talkphp.com/advanced-php-programming/2568-pure-php-template-class
..html. My question is how do you handle AJAX requests from XMLHttpRequest
(); My class pumps out the entire page over again after the AJAX request is
made. In other words the page is displaying twice.



Thanks





Tom Shaw

php.coder@tx.rr.com



"Common sense is the knack of seeing things as they are, and doing things as
they ought to be done."

Harriet
http://www.coolquotes.com/categories/harriet_elizabeth_beecher_stowe.html
Elizabeth Beecher Stowe
Yeti
Re: [PHP] Pure PHP Templating Class/AJAX Problem
October 14, 2008 08:50AM
Well after looking at the template thing you posted with your link it
seems to me like PHP is used to create working XML. So i wonder why
you are using AJAX here.
Now could it be that you use appendChild() ? That function would
simply add the XML again.

It's not easy to tell if you are not showing the JavaScript code ..
Still it simply depends on how you are importing the node you get from
XMLHttpRequest() or responseXML

Btw. importNode() is not working on all Browsers ..
Below is a code snipped I use for my AJAX class in JavaScript to copy
a node of one XML document (like from responseXML) into another. It
works in IE6+ and all W3C compliant browsers.
To make this work you will still have to make some ajustments.

xml_obj.prototype.xml_import_node = function(node, to_node,
all_children) { // cross browser importNode, NOTE: if toNode not
specified it will be set to current root_element
// appends node as a child to to_node
// if all_children is true then all child nodes will be imported too
/* NOTE TYPES:
ELEMENT_NODE = 1;
ATTRIBUTE_NODE = 2;
TEXT_NODE = 3;
CDATA_SECTION_NODE = 4;
ENTITY_REFERENCE_NODE = 5;
ENTITY_NODE = 6;
PROCESSING_INSTRUCTION_NODE = 7;
COMMENT_NODE = 8;
DOCUMENT_NODE = 9;
DOCUMENT_TYPE_NODE = 10;
DOCUMENT_FRAGMENT_NODE = 11;
NOTATION_NODE = 12;
*/
if (!node) return false;
if (!this.DOC) this.DOC = document;
if (!to_node.nodeType) {
if (!this.XML) return false;
try {
to_node = this.XML.documentElement;
this.DOC = this.XML;
} catch(e) {
return false;
}
}
try {
if (!node.nodeType) return false;
switch (node.nodeType) {
case 1: // new element
var new_node = this.DOC.createElement(node.nodeName);
if (node.attributes && (node.attributes.length > 0)) { // if it
has attributes
for (var count = 0; (count < node.attributes.length); count++) {
this.xml_import_node(node.attributes[count], new_node);
}
}
if (all_children && (node.childNodes && (node.childNodes.length >
0))) { // if child nodes
var dump = null;
for (var count = 0; (count < node.childNodes.length); count++) {
this.xml_import_node(node.childNodes[count], new_node, true);
}
}
to_node.appendChild(new_node);
return new_node;
break;
case 2: // new attribute
var name = node.nodeName;
switch (node.nodeName.toLowerCase()) {
case 'onload':
case 'onunload':
case 'onblur':
case 'onclick':
case 'ondblclick':
case 'onfocus':
case 'onkeydown':
case 'onkeypress':
case 'onkeyup':
case 'onmousedown':
case 'onmousemove':
case 'onmouseout':
case 'onmouseover':
case 'onmouseup':
var eval_code = 'to_node.'+node.nodeName.toLowerCase();
eval_code += ' = function() { '+node.nodeValue+' };';
eval(eval_code);
break;
case 'style':
to_node.style.cssText = node.nodeValue; // IE FIX
// no break
case 'class':
to_node.className = node.nodeValue; //IE FIX
// no break
default:
to_node.setAttribute(node.nodeName, node.nodeValue);
}
return to_node;
break;
case 3: // new text_node
case 4: // new cdata section
case 8: // new comment node
to_node.appendChild(this.DOC.createTextNode(node.nodeValue));
return to_node;
break;
case 5: // new entity reference
case 6: // new entity node
case 7: // new processing instruction
case 9: // new document node
case 10: // new document type node
case 11: // new fragment node
case 12: // new notation node
return null; // not needed. if you want it then implement it
break;
default: return false;
}
} catch(e) {
alert(e.message);
return false;
}
}

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
Sorry, only registered users may post in this forum.

Click here to login