2011-07-28 32 views
7

tengo una página en la que hay un controlador de eventos unido a un evento onclick. cuando se desencadena el evento, pasa los contenidos de un cuadro de texto a una solicitud GET. desde la URL no está en el mismo dominio lo tanto, crear una etiqueta de script y y adjuntar la dirección URL a su fuente como estacómo cancelar petición HTTP usando JavaScript

elem.onclick=fire; 

function fire() 
{ 
var text=document.getElementById('text').value; 
var script=document.createElement("script"); 
script.className="temp"; 
script.src="some url"+"?param="+text; 
document.body.appendChild(script); 
} 

ahora si ese evento se dispara y más de una vez que desea cancelar todos la solicitud anterior GET (porque todavía pueden estar recibiendo respuesta) y hacer la solicitud GET con el último texto. Pero para esto necesito cancelar las solicitudes anteriores. he intentado

document.body.removeChild(script); 
script.src=null; 

pero esto no funciona en Firefox (estoy usando Firefox 5), aunque esto funciona en Google Chrome .Does Alguien sabe si estas solicitudes se pueden cancelar en Firefox y en caso afirmativo, ¿cómo?


ACTUALIZACIÓN Como se sugiere por Alfred, utilicé window.stop para cancelar una solicitud, pero no anula una solicitud pero se cuelga para arriba. Significa que cuando miro Firebug parece que se está realizando la solicitud, pero no hay respuesta.

+0

¿Quieres que considerar el uso de una biblioteca como [jQuery] (http://jquery.com)? –

+1

@Matt Ball ciertamente lo haría.pero también puede sugerir javascript bcoz simple quiero entender cómo se hace? – lovesh

+1

Hice una búsqueda en stackoveflow.com y encontré el [siguiente respuesta] [1] [1]: http://stackoverflow.com/questions/117551/javascript-cancel-all-kinds-of -requests/117628 # 117628 – Alfred

Respuesta

1

No estoy seguro si esto es lo que está buscando, pero parece que un problema similar: http://www.velocityreviews.com/forums/t506018-how-to-cancel-http-request-from-javascript.html

+0

Estoy haciendo esto todo el lado del cliente. no pude encontrar nada útil en ese – lovesh

+0

A pesar del título del artículo vinculado, en realidad se trata de hacer funcionar la devolución de datos a un servidor ASP.NET, y está íntimamente relacionado con los detalles específicos de ASP.NET. – ToolmakerSteve

1

Estaría bien para que pueda utilizar un marco JS? Si es así, MooTools tiene esta funcionalidad incorporada en su objeto Request.JSONP

+0

no me importa usar un marco, pero me gustaría saber cómo se hace. ¿Puede explicar o dar un enlace que explica – lovesh

+0

¿puede explicar cómo se hace? Vi el enlace y sé que esto se puede hacer en javascript +1 – lovesh

+0

Mirando a través del código fuente para él, parece que solo está quitando la etiqueta del script del DOM y estableciendo la variable del script en nulo. Tal vez este último paso es lo que te estás perdiendo, ya que tal vez la solicitud no se cancele siempre que haya una referencia. No estoy seguro de esto, sin embargo. –

2

Esto es completamente disparado desde la cadera, pero si la etiqueta de script no ha terminado de cargarse, probablemente puede simplemente script.parentElement.removeChild(script). Eso es más o menos lo que hace mootools de todos modos. (Técnicamente, reemplazan /\s+/ con ' ' primero, pero eso no parece ser terriblemente importante).

+0

esto significa que la solicitud HTTP no se cancela? – lovesh

+1

Debería ser el equivalente de 'XMLHttpRequest.abort();' pero no hay garantías, nunca lo he hecho antes. – cwallenpoole

4

La solución es simple: para crear solicitudes HTTP, use <img> en lugar del elemento <script>. También siempre debe cambiar el atributo src del mismo elemento.

var img; 
function fire() 
{ 
    var text = document.getElementById('text').value; 
    var im = img || (img = new Image()); 
    im.src = "url"+"?param="+text; 
} 

Es posible determinar que en realidad funciona de la siguiente manera: la URL que debe solicitar tener un gran tiempo de respuesta (se puede asegurar que este usando, por ejemplo, la función de PHP sleep). Luego, abra la pestaña Red en Firebug. Si hace clic en el botón varias veces, verá que se cancelan todas las solicitudes incompletas.

+0

y cómo cancelo la solicitud? – lovesh

+0

@lovesh Las solicitudes incompletas se cancelan automáticamente si crea otra solicitud. Si desea cancelar solicitudes y no crear otra, puede hacerlo configurando 'img.src = '';'. – duri

0

para moverse por la emisión de varios dominios, es posible que pueda utilizar CORS lugar (suponiendo que usted puede cambiar lo que está en el servidor): http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/

Si lo hace, usted podría entonces utilizar la más estándar Función abort() de XMLHttpRequest.

CORS es compatible con todos los principales navegadores modernos excepto Opera (http://caniuse.com/cors).

Cuestiones relacionadas