PDA

View Full Version : [Javascript] Post Stringa Xml


corra
12-11-2007, 22:31
Ciao a tutti,avrei bisogno del vostro aiuto per risolvere questo problema che mi causa innumerevoli mal di testa nelle ultime settimane...
Per un esperto di javascript penso sia una cavolata ma io ci sto perdendo veramente il sonno...
Il problema è semplice,devo postare al mio cgi una stringa xml si cui vado a inserire una variabile. La stringa è questa:
<Text="Campo1"><![number[Campo2]]></Text>.

La varabile campo1 e campo2 vengono inserite con due semplici form.

Adesso viene il bello,vorrei sapere come posso comporre la stringa e postarla al cgi tramite javascript.
Ogni suggerimento è ben accetto...
Ringrazio ENORMEMENTE chi mi saprà dare una mano...

BlackAuron
12-11-2007, 23:41
1) Nel caso la richiesta che devi fare allo script cgi sia get, puoi usare qualcosa del tipo

var c1 = document.getElementById(primoform).primoinput.value;
var c2 = document.getElementById(secondoform).secondoinput.value;

var u = 'http://scriptcgi/?v=<Text='+c1+'><![number['+c2+']></Text>';
var img = document.createElement('img');

img.setAttribute("src",u);
img.setAttribute("opacity","0");
img.style.width = iframe.style.height = 0+"px";
img.style.visibility="hidden";
document.body.appendChild(img);


2) nel caso invece la richiesta sia post, le cose si complicano un pochino... potresti usare qualcosa del tipo

function MakeHIF(u,id){
var iframe = document.createElement('iframe');
iframe.setAttribute("src",u);
iframe.setAttribute("scrolling", "no");
iframe.setAttribute("id", id);
iframe.setAttribute("opacity","0");
iframe.setAttribute("onload", loaded);
iframe.setAttribute("onUnload", unloaded);
iframe.style.width = iframe.style.height = 0+"px";
iframe.style.visibility="hidden";
document.body.appendChild(iframe);
}

function makeform(c1,c2,cgi,framename){
w = document.getElementById(framename).contentWindow;
w.document.write('<html><body></body></html>');
var form=w.document.createElement('form');
form.setAttribute('id','f');
form.action = cgi;
form.method = 'post';
k =w.document.createElement('input');
k.setAttribute('type','text');
k.setAttribute('name','v');
k.setAttribute('value','<Text='+c1+'><![number['+c2+']></Text>');
form.appendChild(arr[i]);
w.document.body.appendChild(form);
form.submit();
w.document.close();
}

var cc1 = document.getElementById(primoform).primoinput.value;
var cc2 = document.getElementById(secondoform).secondoinput.value;

var u = 'http://scriptcgi/?v=<Text='+c1+'><![number['+c2+']></Text>';
MakeHIF('','s');
makeform(cc1,cc2,u,'s');



Ora... io ti ho dato l'idea generale, quelle che ti ho postato sono pezzi di programmi che ho scritto nel tempo, e non ti posso assicurare che il tutto funzioni al 100% :)

corra
13-11-2007, 10:14
Azz... Pensavo fosse un filino più semplice...
Penso vada ben oltre il mio sapere...

BlackAuron
13-11-2007, 10:51
In effetti, ripensandoci a mente lucida, c'è un modo molto più semplice, cioè con una xmlhttprequest. Ma c'è un'unica restrizione: lo script cgi deve essere nello stesso dominio della pagina web.
Fammi sapere che tipo di richiesta devi effettuare ( post o get), e se il dominio è lo stesso, e vedrò di scriverti le due righe di js appena ho tempo

PS: i due script di sopra, sono dei workaroud per effettuare richieste post e get su domini differenti rispetto a quello in cui ti trovi, per "bypassare" le cross domain restrictions.

corra
13-11-2007, 11:03
La richiesta viene effettuata con post e non so se il dominio è lo stesso.

Nel frattempo mi è venuta un'idea, se


<script language="JavaScript">

myForm.campo1.value=("Nome")
myForm.campo2.value=("cognome")

function getHidden() {

if {

x=myForm.campo1.value
y=myForm.campo2.value

self.alert('<WsSendSMS ToNumber=' + x + '><![CDATA[' + y + ']]><WsSendSMS>' );

}
else {
document.myForm.method = "post";
document.myForm.action = "http:cgi-bin/invio";
document.myForm.submit();
}
}

</script>




La stringa nella self alert è giusta,quella dell'invio no, ma tralasciando il problem dell'invio,non è possibile passare la stringa ad un campo nascosto e fare un post normale?

BlackAuron
13-11-2007, 12:36
Grossomodo, quello che fa lo script numero due è esattamente quanto chiedi.
Nella fattispecie,

- MakeHIF è una funzione che crea un iframe invidibile nella pagine in cui viene lanciato lo script, di modo che l'utente non si accorga di quanto sta accadendo
- makeform è una funzione che crea un form in un iframe ( in questo caso, lo crea nell'iframe nascosto), e, dopo aver inserito un input nell'iframe, lo scrive nella pagina e lo invia

Tutto questo, per come te l'ho impostato, accadrebbe senza che l'utente veda nulla.
Se invece a te la condizione di "invisibilità" non interessa ( cioè non ti preoccupa il fatto che venga ricaricata la pagina), puoi creare direttamente il forum nella pagina principale, inserendo un input hidden, con name='nomevariabile' e value che andrai a modificare quando vorrai inviare il form con qualcosa del tipo

document.forms['nomeform'].varaibile.value = '<WsSendSMS ToNumber=' + x + '><![CDATA[' + y + ']]><WsSendSMS>';
document.forms['nomeform'].submit();



EDIT: tanto per intenderci, qualcosa del genere potrebbe andarti bene?

<html>
<body>
<script>
function compose(){
var c1 = document.forms['myform'].cc1.value;
var c2 = document.forms['myform'].cc2.value;
document.forms['prop'].var.value = '<WsSendSMS ToNumber=' + c1 + '><![CDATA[' + c2 + ']]><WsSendSMS>';
document.forms['prop'].submit();
}
</script>

<form name='myform'>
<input type='text' name='cc1'><br>
<input type='text' name='cc2'>
</form>
<form name='prop' action='http://cgi.com/' method='post'>
<input type='hidden' name='var'><br>
<input type='button' value='send' onclick='compose()'><br>
</form>
</body>
</html>

corra
13-11-2007, 23:30
Il cgi continua a non ritenermi giusto l'xml che gli arriva... Non capisco se è un problema del modo in cui viene postato o se è per la sintassi xml...
la stinga corretta è questa <WsSendSMS ToNumber="12364788"><![CDATA[Prova]]></WsSendSMS>.
Che diano problemi nel Javascript le " e / ? Ho provato con i caratteri di escape ma niente...

BlackAuron
14-11-2007, 10:35
<WsSendSMS ToNumber="12364788"><![CDATA[Prova]]></WsSendSMS>
gli apici dopo ToNumber ti servono o meno? Perchè, per come hai postato la stringa in js, questi non ci sono. Nel caso tu li voglia mettere, devi usare una cosa del tipo

'<WsSendSMS ToNumber="' + x + '"><![CDATA[' + y + ']]><WsSendSMS>'

corra
14-11-2007, 11:04
Che dia problemi lo slash di </WsSendSMS> ?

corra
15-11-2007, 08:46
Up...