javascript - tabla - Las solicitudes de jQuery Ajax se cancelan sin ser enviadas
pasar variable de javascript a php sin recargar (16)
(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">
)
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.
Ampliando la respuesta de @ Kazetsukai, puede encontrarse con este problema si está haciendo su solicitud AJAX del usuario haciendo clic en un enlace.
Si configura su enlace de esta manera:
<a href="#" onclick="soAjax()">click me!</a>
Y luego un controlador de JavaScript como el siguiente:
soAjax() {
$.ajax({ ... all your lovely parameters ... });
}
Para evitar que su navegador siga el enlace y cancelar cualquier solicitud en curso, debe agregar return false
o e.preventDefault()
para evitar que el evento click se propague:
soAjax() {
$.ajax({ ... etc ... });
return false;
}
O:
soAjax(e) {
$.ajax({ ... etc ... });
e.preventDefault();
}
En mi caso, era la barra que faltaba en la url. Agregar la barra inclinada resolvió mi problema.
En mi caso, la mod-rewrite de I Apache estaba haciendo coincidir la url y redirigiendo la solicitud a https.
Mire la solicitud en chrome: // net-internals / # events.
Mostrará un registro interno de la solicitud. Verificar redireccionamientos
En mi caso, tenía type=''submit''
así que cuando estaba enviando el formulario, la página se recargaba antes de que el hit de Ajax se fuera, por lo que una solución simple era tener type="button"
type = ''submit'' => type = ''button''
He cancelado en Firefox . Algunas llamadas ajax funcionan perfectamente bien para mí, pero fallaron para el compañero de trabajo que realmente tuvo que usarlo.
Cuando revisé esto a través de los trucos de Chrome mencionados anteriormente, no encontré nada sospechoso. Al registrarlo en firebug, mostró la animación de ''carga'' después de las dos llamadas mallicous, y sin pestaña de resultados.
La solución era mega simple: ir a la historia, encontrar el sitio web, hacer clic con el botón derecho -> olvidar sitio web.
Olvidar, no eliminar
Después de eso, ya no hay problemas. Supongo que tiene algo que ver con el .htaccess.
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.
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).
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 un atributo onclick
, asegúrate de return false;
también.
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 una solicitud (canceled)
.
Debe usar chrome://net-internals/#events
que le mostrará los detalles sangrientos de la solicitud que está enviando, incluidos los redireccionamientos ocultos / información de seguridad sobre las cookies que se envían, etc.
por ejemplo, lo siguiente muestra una redirección que no estaba viendo en el rastreo de la red, causada por el hecho de 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)
Tuve el mismo problema, pero en mi caso resultó ser un problema de cookies. Los chicos que trabajaban en el back-end habían cambiado la ruta de la cookie JSESSIONID que está configurada cuando iniciamos sesión en nuestra aplicación, y tenía una vieja cookie con ese nombre en mi computadora, pero con la ruta anterior. Entonces, cuando intenté iniciar sesión en el navegador (Chrome), envié dos cookies llamadas JSESSIONID, con diferentes valores, al servidor, lo que comprensiblemente lo confundió, por lo que canceló la solicitud. Eliminar las cookies de mi computadora lo solucionó.
Tuve este error de una forma más escalofriante: la pestaña de red y los eventos de cromo: // net-internals / # no mostraron la solicitud después de que se completara el js. Al pausar el js en el callcack de error, la pestaña de red mostró la solicitud como (cancelada). Se solicitó sistemáticamente exactamente una (siempre la misma) de varias solicitudes similares en una página web. Después de reiniciar Chrome, ¡el error no volvió a aumentar!
Tuve este problema con una red 3G en particular.
Siempre fallará en las solicitudes DELETE con net_error = -101
en chrome: // net-internals / # events.
Otras redes funcionaron bien así que supongo que hubo un servidor proxy defectuoso o algo así.
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 redirigiendo 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 guión que funcionó hace una semana de repente me estaba dando problemas ... Espero que esto ayude a alguien
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.