Kodunda gösterdiğin gibi yenileyebilirsin.
IE (özellikle IE6) ajax konusunda nazıl davranabiliyor :)
Zaten farklı tarayıcıların farklı sürümlerinde oluşan sorunları bertaraf etmek için üzerinde yıllarca çalışılmış Ajax kütüphaneleri var.
Tekerleği yeniden icad etmek, şu ana kadar (ben dahil) kütüphane geliştiricilerinin çektiği tüm acıları birer birer yaşamak ve kafanı duvardan duvara vurmak istemiyorsan AJAX işlemlerin için bir kütüphane kullanmanı önerebilirim.
sardalya, örneğin, yukarıda bahsettiğin sorunları ve ilk bakışta farkedilemeyecek sorunları (senkronizasyon, memory leakage, exception handling vs.) göz önüne alınarak yazılmış bir ajax kütüphanesi (
http://www.sarmal.com/sardalya )
Epey bir süredir güncellenmiyor (gerek MessengerFX, gerekse
linkibol.com 'un yeni sürümü tüm vaktimi aldığı için pek vakit ayıramıyorum) -- bununla birlikte sardalya'nın oldukça kararlı bir kütüphane olduğunu söyleyebilirim.
linkibol.com 'da gördüğünüz tüm AJAX fonksiyonları sardalya aracılığıyla yapılıyor.
Ayrıca sardalya tamamen özgür kaynaklı olduğu için herkes katkıda bulunabilir.
"ben sardalya'yı geliştirmek istiyorum" diyen herkese kapımız açık ;)
sardalya dışında bir öneri istiyorsan ilk tercihim jquery'den yana olurdu. Arkasında ciddi bir topluluk desteği var. Ve hemen hemen her şey için bir jquery plugin bulabiliyorsun.
YUI, ext.js, eyceks vb. gibi daha pek çok alternatif var değerlendirebileceğin.
...
Gelelim elinde varolan soruna nasıl yaklaşabileceğin
Öncelikle takılmaların nedenine odaklanman lazım.
- kodda herhangi bir yerde bir error/exception oluştuğu için cevap() fonksiyonuna girmiyor musun?
- cevap fonksiyonuna giriyorsun da readyState mi farklı geliyor?
- readyState 4 oluyor ama http 200 (success) dışında başka bir status code mu alıyorsun?
bu konuları araştırabilirsin.
Takılmanın bunun gibi pek çok nedeni olabilir.
Ayrıca, özellikle internet explorer'da yeni bir AJAX gönderiyorsan transport nesneni abort etmen gerekir, yoksa sorun yaşarsın.
sardalya'nın konuyla ilgili segmenti aşağıda:
/*
* abort former request, if any.
* This is necessary to re-use the object
* because IE6 and below are not that
* clever to understand that a
* new request is initiating.
*/
this.abort();