Я делаю вызов AJAX с помощью XMLHttpRequest
.
Он отлично работает в IE7, но когда я пытаюсь сделать то же самое в Firefox, я не могу получить его обратно через response.write
Я использую функцию ниже:
<script type="text/javascript">
function ddSelect_Change() {
var xmlhttp;
if (window.XMLHttpRequest) { // Mozilla, Safari, ...
xmlhttp = new XMLHttpRequest();
}
else if (window.ActiveXObject) { // IE
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
}
}
}
xmlhttp.onreadystatechange = function () {
//alert(xmlhttp.responseText);
if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
}
}
var url = "http://" + location.hostname + "Locationurl?Method=methodname";
xmlhttp.open("POST", url);
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xmlhttp.send();
}
ADDED
У меня есть два отдельных веб-приложения, одно из которых - это веб-приложение tridion, а другое - пользовательское веб-приложение. и я делаю взаимодействие от веб-приложения tridion до пользовательского веб-приложения. Оба url имеют разные domain.and состояние, я получаю 0 в firefox, и для readystate я не получаю (3) в своем уведомлении.
Код, который вы показали до сих пор, должен работать в Firefox. Firefox поддерживает XHR.
Это может помочь: https://developer.mozilla.org/en-US/docs/AJAX/Getting_Started
Обновить:
onreadystatechange
запускается несколько раз во время вызова AJAX, поэтому вы, вероятно, захотите расширить свой ответ на что-то вроде этого:
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState === 4) {
if (xmlhttp.status === 200) {
alert(xmlhttp.responseText);
} else {
alert('There was a problem with the request.');
}
}
}
xmlhttp.readyState === 4
проверяет, что запрос завершен, чтобы вы не пытались предупредить ответ, прежде чем он его действительно получит. xmlhttp.status === 200
проверяет, что вы получили 200 OK
с сервера, чтобы убедиться, что не было ошибок на стороне сервера, или что URL-адрес был неправильным.
xmlhttp.onreadystatechange = function () { alert(xmlhttp.readyState); }
ли у вас какие-либо предупреждения?
Вы рассматривали использование библиотеки jQuery? Он уже позаботился об этих проблемах для вас.
Если вы работаете над расширением GUI SDL Tridion, проверьте проект PowerTools на массу примеров. (Http://code.google.com/p/tridion-2011-power-tools/)