Estoy tratando de conectar un script a la aplicación World-Wide Telescope de Microsoft. Este último escucha en el puerto 5050 los comandos. Se está ejecutando en la misma máquina que el navegador (Chrome en este momento, pero por lo que puedo decir, el comportamiento es el mismo con Firefox 7 e IE 9).
Estoy enviando un encabezado «Access-Control-Allow-Origin: *» con el archivo html original para intentar eliminar las restricciones XSS como mi problema.
Mi código para acceder a WWT es el siguiente:
$.ajax({
type: 'POST',
url: url,
data: data,
crossDomain: true,
success: success,
dataType: dataType
});
url en este caso es «http://127.0.0.1:5050/layerApi.aspx?cmd=new&…» (obviamente … es la abreviatura aquí para algunos parámetros adicionales).
Mirando los diagnósticos de red en Chrome, puedo ver esto:
Request URL:http://127.0.0.1:5050/layerApi.aspx?cmd=new&...
Request Headersview source
Accept:application/xml, text/xml, */*; q=0.01
Content-Type:application/x-www-form-urlencoded
Origin:http://gwheeler4
Referer:http://gwheeler4/conceptconnect.html
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.186 Safari/535.1
La solicitud está saliendo: veo que WWT hace una nueva capa. Sin embargo, no recibo una devolución de llamada. Si agrego una devolución de llamada de error a la que se llama, pero la propiedad de error en el objeto jqXHR es solo «error» y el estado es 0. Si miro la solicitud de red en Chrome, veo «(cancelado)» como estado y sin respuesta.
Si tomo esa misma URL y la pego en una nueva pestaña del navegador, puedo ver que la respuesta es el XML esperado.
Por supuesto, una diferencia aquí es que esto es un GET no un POST, pero lo he intentado en mi guión y no hace ninguna diferencia.
Estoy bastante perplejo por esto y agradecería cualquier idea fresca.
Solución
Si alguien más se encuentra con esto, el problema que tuvimos fue que estábamos haciendo la solicitud ajax desde un enlace, y no impidiendo que se siguiera el enlace. Entonces, si está haciendo esto en un atributo, asegúrese de hacerlo también.onclick
return false;
Otras respuestas
En mi caso estaba teniendo así que cuando estaba enviando el formulario la página se estaba recargando antes de que el ajax golpeara ir así que una solución simple era tener . Si no especifica un tipo, se envía
de forma predeterminada, por lo que debe especificar type="button"
type='submit'
type="button"
type='submit'
=> type='button'
O
Sin tipo => tipo='botón'
O si no desea cambiar el tipo o enviar el formulario en el clic, puede como lo primero que puede hacer.e.preventDefault()
<button>Submit</button>
<script>
$( "button" ).click(function( event ) {
event.preventDefault();
// AJAX Call here
});
</script>