Firefox 3.0.10で動作するREST Webサービスを使用するサンプルコードをMozillaから取得しようとしています。次のコードはFirefoxでは動作しませんがIE 8では動作します!MozillaのこのXMLHttpRequestサンプルがFirefox 3で動作しないのはなぜですか?
- なぜこれが機能しないのですか?
- IE 8はXMLHttpRequestをサポートしていますか?私が見たほとんどの例では、ActiveX 割り当てを使用しています。私は何をしなければならないのですか? XMLHttpRequestはより標準化されているようです。
サンプル:
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);
オープン文が記述 '未定義' で例外をスローしています。これは、reqオブジェクトを割り当て、Firefoxで実行していて、open(これは 'object'型であると言います)を呼び出す前に定義されていることを確認するためにチェックされています。
私はまた、この非同期バージョンには運がないと試しました。
EDIT 2:以下は私の最も最近のコードです:
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:さてさて、私はjQueryのでこれを再加工。 jQueryはIEでうまく動作しますが、Firefoxから実行すると「Undefined」がスローされます。私はダブルチェックし、Firefoxで 'JavaScriptを有効にする'が有効になっています - 他のすべてのWebページでうまく動作しているようです。以下は、jQueryのコードです:ソリューションの
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
概要:
よし、ウェブレッスン101私の問題は確かにクロスドメインました。私は公開されたサービスにヒットしていた自分のサイトを未公開(ファイルシステム上)と見ていました。私は同じドメインの下で私のサイトを公開したときに働いた。
IEとFirefoxの間にも重要な違いがあります。 IEでこのシナリオが発生すると、クロスドメインコールを受け入れるかどうかをユーザーに確認します。 Firefoxは例外をスローします。私は例外的にうまくいっているが、より説明的なものが役に立つだろう。
私を助けてくれたすべての人に感謝します。
私はあなたの新しい「わずかに変更された」コードを私のサーバーで使用しました。それはFirefox3で動作します: http://dogself.com/telluriumTest/test.htm 私はより良いログを追加し、その恐ろしいdocument.writeくそを削除します。 – mkoryak