gedalinux
(usa Slackware)
Enviado em 29/12/2008 - 11:31h
O javascript tal qual definido pela ECMA v3 nao pode escrever em aquivos de forma alguma, o jsScript da MS ate pode usando activeX, mas isto é preso a plataforma.
Quando falo de javascript me refiro ao lado cliente,
e ele é capaz de carregar javascript atraves do objeto Document e metodo load, tanto mozilla family que IE, que não tem família nem amigos, usam este recurso.
Daí veio a febre do ajax e todos entraram em crise e passaram a carregar documentos das formas mais mirabolantes que se pode imaginar.
Tudo isso pra dizer que só podemos carregar XML nativamente usando javascript lado cliente, o ato de salvar no servidor é preciso passar - vamos ajaxear - o XML pro servidor e usar DOM do lado servidor ou como disse, ja que não quer fazer algo poderoso, simplesmente salvar ser documento do jeito que chega em um arquivo...
Javascript que recebe XML e passa pro servidor uma string XML que pode ser recuperada e salva em um documento xml
function HTTPSocket(){
HTTPSocket.httpRequest = null;
this.domDocument = null
// Testa para navegadores Mozilla-Core
if (window.XMLHttpRequest) {
HTTPSocket.httpRequest = new XMLHttpRequest();
this.domDocument = document.implementation.createDocument('', '', null);
}
if (window.ActiveXObject) { // if n2
//"Msxml.XMLHTTP"->nao funciona em conjunto com o parametro do activex abaixo
var httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
HTTPSocket.httpRequest = httpRequest;
this.domDocument = new ActiveXObject('Microsoft.XMLDOM');
}
if (!HTTPSocket.httpRequest) {
window.alert(" O navegador usado não dá suporte a Comunicação Assíncrona.\r\nTroque de Navegador ou atualize sua versão.")
}
HTTPSocket.domDocument = this.domDocument;
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
HTTPSocket.prototype.doRequest = function(domXML){
var Socket = HTTPSocket.httpRequest;
if (Socket) {
xmlString = "datagrid=" + xmlString;
Socket.open("POST", "../processa/", true);
Socket.setRequestHeader("Content-type","application/x-www-form-urlencoded");
Socket.setRequestHeader("Content-length", xmlString.length);
Socket.setRequestHeader("Connection", "close");
Socket.send(xmlString);
Socket.onreadystatechange = this.getResponse;
} else {
window.alert("Houve um erro.\r\nObjeto HTTPSocket não inicializado.");
}
}
//-------------------------------------------------------
HTTPSocket.prototype.getResponse = function(){
var Socket = HTTPSocket.httpRequest;
if (Socket.readyState == 4) {
if (Socket.status == 200) {
alert(Socket.responseText);
//carrega o documento XML vindo do servidor
HTTPSocket.domDocument.load(Socket.responseText);
//agora é só usar os metodos do DOM em javascript para apresentar ana tela.
var doc = HTTPSocket.domDocument.documentElement
}
}
}
o Arquivo php fica bem simples
<?php
//o index datagrid foi configurado no JS
if(isset($_POST) && $_POST["datagrid"]){
//salva o arquivo com os dados do crus,
//do jeito que chega do cliente
//cuidado, é necessário sempre uma validacao,
//estou so facilitando as coisas
file_put_contents("nomedinamico.xml",$_POST["datagrid"]);
}
?>
Lendo os arquivos com PHP, para ser usado com sockets do
Ajax, do contrario, se aleitura for diretamente com o JS,
queira desconsiderar isto
<?php
$arquivoXml = file_get_contents("arqsolicitado.xml");
echo $arquivoXml;
?>
atencao isto é só uma ideia básica, faltam pedaços de códigos e ideias
porque para fechar via forum é muito assunto
o id de XML no php sem uma DTD so tem funcionado "comigo" usando xml:id="valordoID" e isto está documentdo no php.net, sem isto o domdocument->getElementByID("valordoID"), costuma dá pau, mas inclusive depende da distribuição Linux que estiver usando, não deu erro com slackware, porem apresentou com SUSE ao nao usar xml:id..