Pregunta Las solicitudes de jQuery Ajax se cancelan sin ser enviadas


Estoy tratando de conectar un script a la aplicación del Telescopio Mundial de Microsoft. Este último escucha en el puerto 5050 los comandos. Se ejecuta en la misma máquina que el navegador (Chrome ahora mismo, pero hasta donde puedo decir, el comportamiento es el mismo con Firefox 7 e IE 9).

Enviaré un encabezado "Access-Control-Allow-Origin: *" con el archivo html original para tratar de 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 una abreviatura aquí para algunos parámetros adicionales).

Al ver 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 se va a salir: veo que WWT crea una nueva capa. Sin embargo, no recibo una devolución de llamada. Si agrego una devolución de llamada de error 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, la diferencia aquí es que esto es un GET no un POST, pero lo he intentado en mi script y no hace ninguna diferencia.

Estoy bastante sorprendido por esto y agradecería cualquier idea nueva.


75
2017-09-28 01:05


origen


Respuestas:


Si alguien más se topa con esto, el problema que tuvimos fue que estábamos haciendo la solicitud de ajax desde un enlace, y no impidiendo que se siguiera el enlace. Entonces, si estás haciendo esto en una onclick atributo, asegúrese de return false; también.


122
2018-05-14 01:20



Si usa Chrome, no puede ver suficiente información en el panel de red de Chrome estándar para determinar la causa raíz de un (canceled) solicitud.

Tienes que usar chrome://net-internals/#events que le mostrará los detalles sangrientos de la solicitud que está enviando, incluidos redireccionamientos ocultos / información de seguridad sobre el envío de cookies, etc.

p.ej. A continuación, se muestra una redirección que no estaba viendo en el rastreo de la red, debido a que mis cookies no se envían a través del subdominio cruzado:

t=1374052796448 [st=  1]   +URL_REQUEST_START_JOB  [dt=261]
                            --> load_flags = 143540481 (DO_NOT_SAVE_COOKIES | DO_NOT_SEND_AUTH_DATA | DO_NOT_SEND_COOKIES | ENABLE_LOAD_TIMING | MAYBE_USER_GESTURE | REPORT_RAW_HEADERS | VALIDATE_CACHE | VERIFY_EV_CERT)
                            --> method = "GET"
                            --> priority = 2
                            --> url = "https://...."
...
t=1374052796708 [st=261]        HTTP_TRANSACTION_READ_RESPONSE_HEADERS
                                --> HTTP/1.1 302 Moved Temporarily
                                    Content-Type: text/html
                                    Date: Wed, 17 Jul 2013 09:19:56 GMT
...
t=1374052796709 [st=262]     +URL_REQUEST_BLOCKED_ON_DELEGATE  [dt=0]
t=1374052796709 [st=262]        CANCELLED
t=1374052796709 [st=262]   -URL_REQUEST_START_JOB
                            --> net_error = -3 (ERR_ABORTED)

98
2017-07-17 09:26



En mi caso yo estaba teniendo type='submit' así que cuando estaba enviando el formulario, la página se recargaba antes de que el Ajax llegara, por lo que una solución simple era tener type="button"

type = 'submit' => type = 'button'


7
2017-11-05 10:48



Tuve un problema similar. En mi caso, estoy tratando de usar un servicio web en un servidor apache + django (el servicio fue escrito por mí mismo). Estaba teniendo el mismo resultado que tú: Chrome dice que se canceló mientras que FF lo hace bien. Si intenté acceder al servicio directamente en el navegador en lugar de ajax, también funcionaría. Buscando en Google, descubrí que algunas versiones más nuevas de apache no estaban estableciendo correctamente la longitud de la respuesta en los encabezados de respuesta, así que lo hice de forma manual. Con django, todo lo que tenía que hacer era:

response['Content-Length'] = len(content)

Si tiene control sobre el servicio al que está tratando de acceder, descubra cómo modificar el encabezado de respuesta en la plataforma que está utilizando, de lo contrario, deberá contactar al proveedor del servicio para solucionar este problema. Aparentemente, FF y muchos otros navegadores pueden manejar esta situación correctamente, pero los diseñadores de Chrome decidieron hacerlo como se especifica.


6
2017-10-31 03:15



Tuve un problema similar. Al usar chrome: // net-internals / # events, pude ver que mi problema se debía a un redireccionamiento silencioso. Mi solicitud get fue despedida en un script de carga. La url era de la forma "http://example.com/inner-path"y el 301 estaba redireccionando permanentemente a" / inner-path ". Para solucionar el problema, simplemente cambié la URL a" / inner-path "y eso solucionó el problema. Todavía no sé por qué un script que funcionó una semana Hace que de repente me estaba dando problemas ... Espero que esto ayude a alguien


4
2017-10-08 17:18



(Utilizando Web Forms ASP.NET)

Mi problema era que estaba intentando despedir a Ajax del clic de un botón de enviar que tenía una configuración de evento de clic del lado del servidor. Tuve que hacer que el botón simplemente un botón simple (es decir <input type="button"> )


2
2018-05-15 14:57



He tenido el mismo problema, para mí estaba creando el iframe de manera temporal y estaba eliminando el iframe antes de que se completara el ajax, por lo que el navegador cancelaría mi solicitud de ajax.


2
2018-03-04 20:11



Recibí este error al realizar una solicitud usando http a una url que requería https. Supongo que la llamada ajax no está manejando la redirección. Este es el caso incluso con la opción crossDomain ajax establecida en true (en JQuery 1.5.2).


1
2018-02-15 23:44