(Sunucu tarafında) çalıştırıldıktan ajax isteği iptal etmek için nasıl

5 Cevap php

AJAX isteği iptal etmek için basit bir yolu olup olmadığını merak ediyorum?

Sadece istemci tarafında XMLHTTPRequest bir 'iptaline' çağrı ötesinde, kolayca sunucu sürecini durdurmak için bir yol var? Sunucu Apache kullanıyor.

Teşekkürler

5 Cevap

Hayır basit bir yolu kesinlikle yoktur.

Ben bazı karmaşık yollar düşünebilirsiniz, ancak güvenilmez olacaktır.

Muhtemelen sadece koşuyoruz bir istek reversing değişiklikler için bir süreç geliştirme daha fazla şans olacak (Ben bunu durdurmak isterim nedeni olduğunu varsayıyorum.)

Başka bir Ajax isteği başlatır. Başka çağrıldığında kesintiye olmaktan bir önceki isteği önlemek için nasıl anlamaya çalışıyorum bu konuyu buldum.

En kolay yolu sadece 503 (veya benzeri) HTTP yanıt başlığını göndermek ve sunucu tarafı uygulaması (ya da sadece uygulamayı iptal) iptal olacaktır. Hiçbir veri varsayarsak gönderilen ve / veya size sadece başarısız bir istek gibi davranabilirsiniz HTTP yanıt başlığı istemci tarafında kontrol edildi.

Kısa cevap "hayır" dır. Eğer varsa hangi durumda sunucu tarafında çok uzun bir çalışan arka planlı süreci hakkında konuşuyor sürece ikinci bir Ajax isteği üzerine bir durak başlatmak. Eğer bir Apache / PHP sunucusuna düzenli bir istek bahsediyoruz Ama eğer, o hayır ... Apache isteğiniz koşuyordu iplik tanımlamaya yeterli sorun olurdu.

Hatta işlemine başlamadan önce nasılsa Ajax isteği doğrulamak için çok daha kolay olurdu; Çalıştırdığınız olmak istediğini emin olun. Ne yaptıklarını kesintiye olamaz farkında olmak kullanıcıya ihtiyacınız varsa siz de bir JavaScript onay süreci olabilir.

Steven yayınlanmıştır gibi de yararına olabilir gibi, bir ters sürecine sahip geliyor.

Orada (birçok dedi gibi) ağ üzerinden isteğin kendisini durdurmak için iyi bir yolu vardır, ancak bu isteğin etkilerini durdurmak için nispeten kolay. yani

sunucu tarafında: yaparsın exit sürekli sırasında bu değişiklik olacağını varsayarak, tekrar (çerezler veya oturumları gibi (bayraklar gibi davranan) global değişkenler kontrol ederek (veya komut öldürmek gerektiren ediyorum ne olursa olsun terim) script yürütme). ayrıca, (eğer varlığı için yoklamak) bayrakları gibi dosyaları veya veritabanı girdileri tutmak olabilir.

istemci tarafında: Eğer (söylediler diğerleri gibi, tüm tarayıcılarda çalışmıyor ki) abort diyebiliriz, veya (geri arama üstündeki küresel bir semafor / bayrağını tutmak olabilir çekler hala yürütmek ya da gerekiyorsa küresel değer) görmek için. Örnek:

 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