¿Cómo podemos llamar a AJAX en Firefox?

Estoy haciendo una llamada AJAX usando el XMLHttpRequest.

Funciona bien en IE7, pero cuando intento lo mismo en Firefox, no puedo recuperarlo a través del response.write

Estoy usando la siguiente función:

<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(); 
}

ADICIONAL

Tengo dos aplicaciones web separadas, una es la aplicación web tridion y la otra es una aplicación web personalizada. y estoy haciendo interacción desde la aplicación web tridion a la aplicación web personalizada. Tanto la URL tiene un dominio diferente como el estado en el que obtengo 0 en Firefox, y para el estado listo no obtengo (3) en mi alerta.

preguntado el 24 de agosto de 12 a las 08:08

¿Cómo se ve el resto de su código AJAX? -

@ChristoferEliasson estoy usando códigos de descanso como el anterior. -

¿Recibe algún error JS? Si registra su tráfico HTTP usando fiddler, ¿se realiza una llamada al servidor o no? -

Es posible que deba asegurarse de que su función onreadystatechange esté definida antes de llamar a .send() (su explicación anterior no aclara si está haciendo esto o no). -

2 Respuestas

El código que has mostrado hasta ahora debería funcionar en Firefox. Firefox admite XHR.

Esto podría ser de ayuda: https://developer.mozilla.org/en-US/docs/AJAX/Getting_Started

Actualizar:

onreadystatechange se activa varias veces durante una llamada AJAX, por lo que probablemente desee extender su devolución de llamada a algo como esto:

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 verifica que la solicitud se haya completado, de modo que no intente alertar la respuesta antes de que realmente la tenga. xmlhttp.status === 200 verifica que recibiste un 200 OK del servidor, para asegurarse de que no haya errores del lado del servidor o que la URL sea incorrecta.

Respondido 24 ago 12, 08:08

Gracias, he usado el mismo código que me sugiriste, pero aún no logro que funcione en Firefox. SDLPrincipiante

@SDLBeginner ¿Recibe algún error en Firefox? ¿Cómo se activa la llamada AJAX? ¿Puede ser que el código que activa la llamada no funcione en Firefox? ¿Qué sucede si solo haces: xmlhttp.onreadystatechange = function () { alert(xmlhttp.readyState); } ¿Recibes alguna alerta entonces? - cristofer eliasson

No, cuando me quedo solo xmlhttp.onreadystatechange = function () { alert(xmlhttp.readyState); } Recibo 1 como primera alerta y 4 como segunda alerta. Mantuve mi código editado en duda. - SDLPrincipiante

@SDLBeginner Bien, entonces sabemos que la llamada se activa al menos. Si lo extiendes a xmlhttp.onreadystatechange = function () { if (xmlhttp.readyState === 4) { alert(xmlhttp.status); }} ¿Entonces obtienes 200 como su alerta? - cristofer eliasson

@SDLBeginner En ese caso, dado que realmente desea realizar solicitudes entre dominios, tendría que investigar CORSo JSON-P. - cristofer eliasson

¿Ha considerado usar una biblioteca como jQuery? Ya se ha ocupado de estos problemas por usted.

Si está trabajando en una extensión de GUI de SDL Tridion, consulte el proyecto PowerTools para ver muchos ejemplos. (http://code.google.com/p/tridion-2011-power-tools/)

Respondido 24 ago 12, 08:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.