# Per AJAX Daten an anderen Server schicken



## ddhb (10. Dezember 2005)

Hallo!


```
/***********************************************************\ 
* AJAX Handler class                                     
\***********************************************************/ 
 
/* 
* main function 
* @params:    none 
*/ 
function ddhb_AJAX(){ 
    this.AJAX_handler = false; 
    this.debug = false; 
    this.init(); 
}; 
 
 
/* 
* intizialize the AJAX functions 
* @params:    none 
*/ 
ddhb_AJAX.prototype.init = function (){ 
    if(this.AJAX_handler) return; 
     
    if(window.XMLHttpRequest){ // Mozilla, Safari, Firefox 
        try { 
            this.AJAX_handler = new XMLHttpRequest(); 
                 
        } catch(e) { 
            if(this.debug) alert('XMLHttpRequest init failed'); 
            return false; 
        } 
    }else if(window.ActiveXObject){ // IE 
                try { 
                  this.AJAX_handler = new ActiveXObject("Microsoft.XMLHTTP"); 
                  return true; 
                } catch(e) { 
                    if(this.debug) alert('Microsoft.XMLHTTP init failed'); 
                    return false; 
                } 
    } 
}; 
 
 
/* 
* Send request to server 
* @param1:    URL to script 
* @param2:    datas for script 
*/ 
ddhb_AJAX.prototype.send = function (url,datas){ 
     
    if(!this.AJAX_handler) { // if AJAX is not init 
        this.init(); 
        if(this.debug) alert('AJAX not init at ddhb_AJAX::send'); 
    }
 
    this.AJAX_handler.open('POST', url+'?'+datas); 
    this.AJAX_handler.send(null); 
}; 
 
 
/* 
* Set event function for the onreadystatechange property 
* @param1:    a function that checks 
*/ 
ddhb_AJAX.prototype.onreadystatechange = function (func){ 
    if(typeof(func) != 'function') { 
        if(this.debug) alert('Param1 at ddhb_AJAX::onreadystatechange is not a function'); 
        return false; 
    } 
     
    if(!this.AJAX_handler) { // if AJAX is not init 
        this.init(); 
        if(this.debug) alert('AJAX not init at ddhb_AJAX::send'); 
    } 
     
    this.AJAX_handler.onreadystatechange = func; 
}; 
 
 
// init AJAX 
var ddhb_AJAX = new ddhb_AJAX();


/***********************************************************\ 
* Speicherung der Besuche auf einer NP                                 
\***********************************************************/


var test = parent.document.getElementById('Gb_link').innerHTML;
ddhb_AJAX.AJAX_handler.send('http://ddhb.net/festlinfo.php','nickname='+test);
ddhb_AJAX.AJAX_handler.onreadystatechange(getResult);

function getResult(){ 
    var AJAX_handler = ddhb_AJAX.AJAX_handler;  
     
    if(AJAX_handler.readyState == 4) { 
        var nickname = AJAX_handler.responseText; 
        alert(nickname); 
    } 
}
```
 So jetzt mal was das Script macht, bzw. machen sollte.
In der Variable test ist ein Name gespeichert, und der Name sollter per AJAX an eine PHP Datei auf einen anderen Server gesendet werden. Das PHP Script speichert den Namen dann in einer Liste und gibt per echo diesen Namen nocheinmal zurück.
Ich bekomme jetzt allerdings die Meldung 





> Fehler: uncaught exception: Die Erlaubnis für den Aufruf der Methode XMLHttpRequest.open wurde verweigert


 Ist das eine Sicherheitseinstellung von Mozilla, dass man keine Sachen ausserhalb des Servers ansteuern kann oder einfach ein Fehler in meinem Script?

Danke schonmal für die Hilfe
ddhb


----------



## Sven Mintel (11. Dezember 2005)

ddhb hat gesagt.:
			
		

> Ist das eine Sicherheitseinstellung von Mozilla, dass man keine Sachen ausserhalb des Servers ansteuern kann




das ist  es


----------



## ddhb (11. Dezember 2005)

Kann man das nicht umgehen?
Hab im Net was gelesen von 
	
	
	



```
netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');
```
Hab aber keine Ahnung wie ich das einbauen soll, bzw. was das überhaupt macht.


----------



## Sven Mintel (11. Dezember 2005)

Wenn man die Sicherheitseinstellungen des Mozilla ändert, ginge es schon....nur wird das niemand für dich tun.

Diese Zeile da würde zwar eine entsprechende Anfrage an den User stellen....allerdings nur, wenn das Skript im lokalen Dateisystem ausgeführt wird....somit hilft es dir höchstwahrscheinlich nicht weiter.


----------



## ddhb (11. Dezember 2005)

Wo könnte ich das den umstellen? Die meisten die dieses Script aufrufen benutzen sowiso den IE. Gibts bei dem auch eine solche einschränkung?

Ich kanns leider nicht testen da ich hier Linux am laufen habe und keinen Internet Explorer da habe.


----------



## JohannesR (11. Dezember 2005)

prefs.js, liegt unter NetBSD in $HOME/.mozilla/firefox/<profil-ID>/ - im Falle von Firefox.


----------



## ddhb (11. Dezember 2005)

Danke, einen Eintrag wie "UniversalBrowserRead" finde ich dort allerdings nicht.


----------



## JohannesR (11. Dezember 2005)

Ups, habe mich geirrt... 

Bypassing Security Restrictions and Signing Code auf http://developer.mozilla.org/


----------



## ddhb (11. Dezember 2005)

Danke für den Link, das haut in Mozilla schon perfekt hin, aber im IE bekomme ich beim Senden der Daten zum Server die Meldung "Zugriff verweigert".
Gibt es für den IE vlt. auch noch eine Lösung? Denn Wie gesagt, die Mehrzahl der Benutzer verwendet leider den IE.


----------



## Sven Mintel (11. Dezember 2005)

Die beste Lösung wäre wohl, wenn du die Verbindung zu dem fremden Server mit bspw. einem PHP-Skript aufnimmst.

Also ca so:
Das JS sendet die Anfrage an dein eigenes PHP-Skript
Dein PHP-Skript wiederum sendet die Anfrage per fsockopen() an den fremden Server
Dein PHP-Skript gibt die Antwort des fremden Servers aus....und somit an dein JS zurück.

....denn die Sicherheitseinstellungen wird, wie angedeutet, wegen deinem Skript niemand ändern.


----------



## ddhb (11. Dezember 2005)

Das Problem ist, dass das alles fest vorgegeben ist, und ich es so per JS lösen muss, da ich kein eigenes PHP Script auf den Server laden kann.


----------



## Sven Mintel (11. Dezember 2005)

Tja....was soll ich da sagen....dann gehts eben nicht 

Eine betreffende Einstellung für den IE habe ich nicht entdeckt....ich schätze, da muss man in der Registry rumfummeln....und das wird definitiv niemand tun wollen.


----------



## ddhb (12. Dezember 2005)

Ich habe im Internet eine Einstellung gefunden die mir mein Vorhaben dann erlaubt.
In der Zoneneinstellung ist diese unter "Verschiedenes" mit dem Namen "Auf Datenqullen über Domänengrenze hinweg zugreifen" gelistet.
Falls dies aktiviert ist funktioniert es auch im IE.

Mein Frage jetzt: Kann man dies so wie im Mozilla lösen, so das der User gefragt wird ob er dies zulassen will?


----------

