PDA

View Full Version : [AJAX]XMLHttpRequest.open


MEMon
29-11-2006, 22:21
Ho un problema, in pratica mi si solleva un'eccezzione alla chiamata di XMLHttpRequest.open, questa:
uncaught exception: Permesso negato al metodo di chiamata XMLHttpRequest.open

So che l'eccezzione è data perchè cerco di accedere ad uno script PHP che si trova su un dominio diverso da quello in cui risiede lo script java che ne fa richiesta, ed è questo il punto, posso aggirare il problema?

MEMon
30-11-2006, 14:43
nessuno?

tomminno
30-11-2006, 15:03
Potresti descrivere un pò meglio la situazione?
PHP è un linguaggio server-side, Javascript è client-side, non possono comunicare tra di loro. Quello che puoi fare è scrivere codice PHP che inserisca Javascript in una pagina.
Vorresti usare Ajax, non potresti richiamare una funzione in un file .js?

MEMon
30-11-2006, 15:07
Ho scritto uno script javascript che fa una richiesta di XMLHttpRequest.open ad uno script PHP per ricevere alcuni dati.
Fin qui tutto normale, il problema è che suddetto script non si trova sullo stesso dominio in cui gira lo script js, quindi mi solleva quella eccezzione.
Ecco io volevo sapere se ci fosse un modo per aggirare il problema...
Questo è il codice che si connette allo script:
function CreateXmlHttpObject(myFunction) {
var xmlhttpObject=null;
try{
xmlhttpObject=new XMLHttpRequest();
}catch(e){
try{
xmlhttpObject=new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
xmlhttpObject=new ActiveXObject("Microsoft.XMLHTTP");
}
}
xmlhttpObject.onreadystatechange=myFunction;
return xmlhttpObject;
}

function result(){
if (myRequest.readyState==4&& myRequest.status==200) {
alert(myRequest.responseText);
}
}

function requestHttpConnection(web){
myRequest=CreateXmlHttpObject(result);
myRequest.open("GET",web+"?link="+link);
myRequest.send(null);
}

whiles_
30-11-2006, 15:14
Ho scritto uno script javascript che fa una richiesta di XMLHttpRequest.open ad uno script PHP per ricevere alcuni dati.
Fin qui tutto normale, il problema è che suddetto script non si trova sullo stesso dominio in cui gira lo script js, quindi mi solleva quella eccezzione.
Ecco io volevo sapere se ci fosse un modo per aggirare il problema...
Questo è il codice che si connette allo script:
function CreateXmlHttpObject(myFunction) {
var xmlhttpObject=null;
try{
xmlhttpObject=new XMLHttpRequest();
}catch(e){
try{
xmlhttpObject=new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
xmlhttpObject=new ActiveXObject("Microsoft.XMLHTTP");
}
}
xmlhttpObject.onreadystatechange=myFunction;
return xmlhttpObject;
}

function result(){
if (myRequest.readyState==4&& myRequest.status==200) {
alert(myRequest.responseText);
}
}

function requestHttpConnection(web){
myRequest=CreateXmlHttpObject(result);
myRequest.open("GET",web+"?link="+link);
myRequest.send(null);
}
no, purtroppo con ajax puoi richiedere solo pagine nello stesso dominio... è per sicurezza .. se vuoi fare una cosa del genere devi farlo con un linguaggio server-side. si scrive eccezione comunque :D

ciao

MEMon
30-11-2006, 15:36
heheh scusami l'errore dai :D

E quindi se a me servisse avere i dati ricevuti dallo script php in locale come dovrei fare? Mi attacco al tram? :D

0rph3n
30-11-2006, 16:00
hai provato a creare una pagina interna al dominio che rediriga alla pagina php dalla quale vuoi le informazioni e a richiamare poi questa in javascript? :stordita:

MEMon
30-11-2006, 16:53
Ci ho pensato ma in questo modo devo sempre ricaricare la pagina per ottenere nuovi dati...

MEMon
30-11-2006, 18:16
Uppettino, senza questa possibilità mi trovo bloccato!!!

Devo contattare un db remoto da locale!!! come faccioooooooooooo

whiles_
01-12-2006, 13:17
Uppettino, senza questa possibilità mi trovo bloccato!!!

Devo contattare un db remoto da locale!!! come faccioooooooooooo
spegati meglio su quello che devi fare... per ricevere una pagina da un'altro server devi utilizzare sempre e comunque un linguaggio lato server, non c'è altra possibilità!

Angus
01-12-2006, 16:07
Ci ho pensato ma in questo modo devo sempre ricaricare la pagina per ottenere nuovi dati...

Perchè? Se nel dominio dello script, lato server, hai un qualcosa che faccia da proxy verso la pagina PHP esterna non vedo come il browser possa accorgersene.

MEMon
01-12-2006, 16:17
Come faccio poi a richiedere nuovi dati alla pagina php interna al dominio senza ricaricare suddetta pagina?
L'unico modo è inviargli un GET o un POST e per farlo bisogna refreshare la pagina.

Angus
01-12-2006, 16:30
Come faccio poi a richiedere nuovi dati alla pagina php interna al dominio senza ricaricare suddetta pagina?
L'unico modo è inviargli un GET o un POST e per farlo bisogna refreshare la pagina.

Il meccanismo che citi dovrebbe essere a carico dello script js che effettua la chiamata AJAX, non a carico del proxy interno... se quella pagina PHP esterna fosse interna al dominio cambierebbe qualcosa?

MEMon
01-12-2006, 16:33
La pagina php può essere anche interna(anzi lo è senz'altro), il problema è che lo script javascript che si dovrebbe connettere a suddetta pagina php, non può assolutamente stare nello stesso dominio, ma deve essere in locale.
E questo non mi permettere di "comunicare" con lo script php il quale è l'unico che dialoga con il db.

Angus
01-12-2006, 16:50
La pagina php può essere anche interna(anzi lo è senz'altro), il problema è che lo script javascript che si dovrebbe connettere a suddetta pagina php, non può assolutamente stare nello stesso dominio, ma deve essere in locale.
E questo non mi permettere di "comunicare" con lo script php il quale è l'unico che dialoga con il db.

Non hai capito.
Se funzionasse la situazione

javascript su dominio1 -> chiama -> PHP su dominio2 -> risponde -> javascript su dominio1

il refresh come lo gestiresti? Lato javascript o no?

Se ora interponessi il proxy per aggirare il limite del dominio

javascript su dominio1 -> chiama -> PHP su dominio1 -> chiama -> PHP su dominio2 -> risponde -> PHP su dominio1 -> risponde -> javascript su dominio1

Cosa cambierebbe ai fini del refresh?

MEMon
01-12-2006, 16:53
Non hai capito.
Se funzionasse la situazione

javascript su dominio1 -> chiama -> PHP su dominio2 -> risponde -> javascript su dominio1

il refresh come lo gestiresti? Lato javascript o no?
Questa non va bene non si può fare.


Se ora interponessi il proxy per aggirare il limite del dominio

javascript su dominio1 -> chiama -> PHP su dominio1 -> chiama -> PHP su dominio2 -> risponde -> PHP su dominio1 -> risponde -> javascript su dominio1

Cosa cambierebbe ai fini del refresh?
Questa sinceramente non l'ho capita...cosa intendi con
PHP su dominio1 -> chiama -> PHP su dominio2 -> risponde -> PHP su dominio1
Come faccio a far dialogare due script php?

Angus
01-12-2006, 20:20
Questa non va bene non si può fare.

Infatti ho usato il condizionale.


Questa sinceramente non l'ho capita...cosa intendi con
PHP su dominio1 -> chiama -> PHP su dominio2 -> risponde -> PHP su dominio1
Come faccio a far dialogare due script php?

Ecco il motivo dell'incomprensione reciproca. Non conosci cosa sia un proxy (http://en.wikipedia.org/wiki/Proxy_pattern) (inteso come pattern (http://it.wikipedia.org/wiki/Design_pattern)) e come realizzarlo. Purtroppo in PHP non so aiutarti, attendi l'intervento di uno che ci sappia mettere le mani.

Un documento in inglese che illustra chiaramente la tua situazione e il conseguente utilizzo del proxy lato server: leggi qua (http://developer.yahoo.com/javascript/howto-proxy.html).

EDIT: trovato un esempio in PHP (http://www.daniweb.com/code/snippet494.html) . Spero possa esserti utile.