Я пытаюсь получить образец кода из Mozilla, который использует веб-службу REST для работы в Firefox 3.0.10. Следующий код НЕ работает в Firefox, но работает в IE 8!Почему этот образец XMLHttpRequest из Mozilla не работает в 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 (который говорит, что он имеет тип «объект»).
Я также пробовал асинхронную версию этого без везения.
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». Я дважды проверил и включил «Включить JavaScript» в Firefox - кажется, отлично работает на всех других веб-страницах. Ниже приведен код 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 выдает исключение. Хотя я в порядке с исключением, более описательным было бы полезно.
Спасибо всем, кто мне помог.
Я использовал ваш новый «слегка модифицированный» код на моем сервере. он работает в firefox 3. проверьте это: http://dogself.com/telluriumTest/test.htm Я только добавил лучше регистрировать и удалять этот ужасный document.write crap. – mkoryak