Ich versuche, den Beispielcode von Mozilla zu erhalten, der einen REST-Webdienst benötigt, um unter Firefox 3.0.10 zu arbeiten. Der folgende Code funktioniert NICHT in Firefox, sondern in IE 8!Warum funktioniert dieses XMLHttpRequest-Beispiel von Mozilla in Firefox 3 nicht?
- Warum funktioniert das nicht?
- Hat IE 8 Unterstützung für XMLHttpRequest? Die meisten Beispiele, die ich gesehen habe, verwenden die ActiveX Zuordnung. Was soll ich tun? XMLHttpRequest scheint standardisierter zu sein.
Probe:
var req = new XMLHttpRequest();
req.open('GET', 'http://localhost/myRESTfulService/resource', false); // throws 'undefined' exception
req.send(null);
if(req.status == 0)
dump(req.responseText);
Die Open-Anweisung mit der Beschreibung eine Ausnahme wirft 'undefiniert'. Das ist seltsam, da ich das req -Objekt zuteile, es in Firefox laufe und überprüfe, ob es vor dem Aufruf von open definiert ist (was besagt, dass es vom Typ 'object' ist).
Ich habe auch die asynchrone Version von diesem ohne Glück versucht.
EDIT 2: Unter meinem letzten Code ist:
function createRequestObject() {
if(window.XMLHttpRequest) {
return new XMLHttpRequest();
}
else if(window.ActiveXObject) {
return new ActiveXObject("Microsoft.XMLHTTP");
}
return null;
}
function handleResponse(req) {
document.writeln("Handling response..."); // NEVER GETS CALLED
if(req.readyState == 0) {
document.writeln("UNITIALIZED");
}
else if(req.readyState == 1) {
document.writeln("LOADING");
}
else if(req.readyState == 2) {
document.writeln("LOADED");
}
else if(req.readyState == 3) {
document.writeln("INTERACTIVE");
}
else if(req.readyState == 4) {
document.writeln("COMPLETE");
if(req.status == 200) {
document.writeln("SUCCESS");
}
}
}
document.writeln("");
var req = createRequestObject();
try {
document.writeln("Opening service...");
req.onreadystatechange = function() { handleResponse(req); };
req.open('POST', 'http://localhost/test/test2.txt', true); // WORKS IN IE8 & NOT FIREFOX
document.writeln("Sending service request...");
req.send('');
document.writeln("Done");
}
catch(err) {
document.writeln("ERROR: " + err.description);
}
EDIT 3: Okay, überarbeitet ich dies in jQuery. jQuery funktioniert gut in IE, aber es wirft 'Undefined', wenn es von Firefox läuft. Ich habe es überprüft und "JavaScript aktivieren" ist in Firefox aktiviert - scheint auf allen anderen Webseiten gut zu funktionieren. Unten ist die jQuery-Code:
function handleResponse(resp) {
alert("Name: " + resp.Name);
alert("URL: " + resp.URL);
}
$(document).ready(function() {
$("a").click(function(event) {
try {
$.get("http://localhost/services/ezekielservices/configservice/ezekielservices.svc/test",
"{}",
function(data) { handleResponse(data); },
"json");
}
catch(err) {
alert("'$.get' threw an exception: " + err.description);
}
event.preventDefault();
});
}); // End 'ready' check
Zusammenfassung der Lösung:
Okay, Weblektion 101. Mein Problem war in der Tat Cross-Domain. Ich habe meine Website nicht veröffentlicht (nur auf dem Dateisystem), die einen veröffentlichten Dienst getroffen hat. Als ich meine Website unter derselben Domain veröffentlichte, funktionierte sie.
Was auch eine wichtige Unterscheidung zwischen IE und Firefox ergibt. Wenn IE dieses Szenario erfährt, wird der Benutzer gefragt, ob er den domänenübergreifenden Aufruf akzeptiert. Firefox löst eine Ausnahme aus. Während mir eine Ausnahme gutging, wäre eine aussagekräftigere hilfreich gewesen.
Danke für alle die mir geholfen haben.
Ich habe Ihren neuen "leicht modifizierten" Code auf meinem Server verwendet. es funktioniert in Firefox 3. Überprüfen Sie es heraus: http://dogself.com/telluriumTest/test.htm ich fügte nur besser logging hinzu und entferne das schreckliche document.write Mist. – mkoryak