2009-04-28 8 views

Respuesta

7

No. Definitivamente no hay una manera simple.

Se me ocurren algunas formas complejas, pero no serían confiables.

Es probable que tenga más suerte el desarrollo de un proceso para revertir los cambios con respecto a una solicitud que acaba de ejecución (estoy asumiendo que esa es la razón por la que quiere detenerlo.)

+0

la razón sería para detener un proceso largo de sacrificar los recursos así que no es que ver con las modificaciones a un DB . THX para la respuesta – AndreLiem

+1

Como menciona zombat a continuación, si se trata de un proceso largo, podría tener tiempo para hacer algo, pero identificar el hilo de Apache sería muy difícil. Tendría que configurar algún tipo de mecanismo de almacenamiento para vincular la ejecución de scripts a las solicitudes (lo que significa que las solicitudes deben incluir una identificación única de algún tipo). Si almacenó ese enlace en una base de datos, puede enviar una segunda solicitud para marcar la solicitud como cancelada, y luego sondear periódicamente ese registro de la base de datos de su secuencia de comandos en ejecución para ver si puede dejar de funcionar. Sería complicado y existe un gran potencial de error/actividad maliciosa. –

0

La forma más fácil sería solo enviar un encabezado de respuesta HTTP 503 (o similar) y cancelar la aplicación del lado del servidor (o simplemente cancelar la aplicación). Suponiendo que no se envió ningún dato y/o verificó el lado del cliente del encabezado de respuesta HTTP, puede tratarlo como una solicitud fallida.

0

La respuesta corta es "no". A menos que esté hablando de un proceso de fondo de ejecución muy largo en el lado del servidor, en cuyo caso podría tener una segunda solicitud Ajax iniciar una parada en él. Pero si está hablando de una solicitud regular a un servidor Apache/PHP, entonces no ... identificar en qué subproceso de Apache se estaba ejecutando su solicitud sería un problema suficiente.

Sería mucho más fácil verificar su solicitud de Ajax de alguna manera incluso antes de comenzar el proceso; asegúrese de que sea lo que desea ejecutar. También podría tener un proceso de confirmación de Javascript si necesita que el usuario sepa que lo que está haciendo no se puede interrumpir.

Como Steven publicó, tener un proceso de reversión parece que también podría ser lo mejor para usted.

4

Inicia otra solicitud de Ajax. Encontré este hilo intentando descubrir cómo evitar que se interrumpa una solicitud anterior cuando se llama a otra.

1

no hay buenas maneras de detener la solicitud en la red (como muchos han dicho), pero es relativamente fácil detener los efectos de la solicitud. es decir,

en el lado del servidor: puede exit (o cualquier término que requiera para eliminar el script) constantemente comprobando las variables globales (que actúan como indicadores) como cookies o sesiones (una vez más, suponiendo que cambiarían durante el ejecución del guion). Además, puede mantener los archivos o las entradas de la base de datos como indicadores (que puede sondear para su existencia).

en el lado del cliente: puede llamar al abort (que no funciona en todos los navegadores, como otros han dicho), o puede mantener un semáforo/bandera global en la parte superior de su devolución de llamada (que controla el valor para ver si aún se debe ejecutar o no). ejemplo:

window.ajaxIsStillGood = true; 

xhr.onreadystatechange = function() 
{ 
    if(4 === xhr.readyState && 200 === xhr.status) 
    { 
     if(true === window.ajaxIsStillGood){ /* still good */ } 
    } 
} 

/* bad stuff happens */ 

window.ajaxIsStillGood = false; // now the code won't execute 
-1

¿Qué hay de enviar otra petición Ajax que cambiaría en particular $_SESSION var que se controla por ese largo proceso?

0

Para PHP He encontrado una forma de detener o abortar usando session_write_close();. Simplemente ponga esto después de session_start() en su secuencia de comandos. Si está utilizando framwework o OOP, guárdelo como primera línea de su método. Esto sucede porque los datos de la sesión están bloqueados hasta que el ajax haya terminado.

Probado & vio otra página se carga después de consejos xhr.abort()

solución encontrada aquí Abort Ajax requests using jQuery

Cuestiones relacionadas