|
|
#1 (permalink) |
|
Üyelik Tarihi: 28.05.2001
Yer: İzmir/Ankara
Yaş: 23
Mesaj: 766
|
Internet Explorer'da .documentElement sorunu [Ajax]
Merhabalar, Sorunum Firefox'ta çalışıp internet Explorer'da çalıştırmayı başaramadığım bir JS kodu üzerine: Kod:
ajax = new ActiveXObject("Msxml2.XMLHTTP.3.0"); . . . . . var rootNode = ajax.responseXML.documentElement; var categories = rootNode.getElementsByTagName("category"); Aslında internette bu sorundan bahseden birkaç site bulabildiysem de çözüm bulamadım. |
|
|
|
|
|
#2 (permalink) |
|
Üyelik Tarihi: 22.04.2003
Yer: İstanbul
Yaş: 26
Mesaj: 112
|
Re: Internet Explorer'da .documentElement sorunu [Ajax]
Eger baska bir uyumsuzluk yok ise, httprequest objeni asagidaki sekilde uretip tekrar deneyebilirsin. Aklima ilk bu geldi.
Kod:
if (window.XMLHttpRequest) // Object of the current windows
{
request = new XMLHttpRequest(); // Firefox, Safari, ...
}
else
if (window.ActiveXObject) // ActiveX version
{
request = new ActiveXObject("Microsoft.XMLHTTP"); // internet Explorer
}
__________________
http://www.kimindir.com - Alan adı sorgulama (whois) servisi... [v0.4 beta] |
|
|
|
|
|
#4 (permalink) |
|
Üyelik Tarihi: 22.04.2003
Yer: İstanbul
Yaş: 26
Mesaj: 112
|
Re: Internet Explorer'da .documentElement sorunu [Ajax]
Kodun tamamı biraz uzun galiba ve o nedenle göndermedin sanırım. Kodda request objesini browsera göre ayırmadığını görünce ondan kaynaklanabileceğini düşünmüştüm yanılmışım demek ki.
Statik bir XML dosyası mı okumaya çalışıyorsun yoksa server-side bir script ile mi ürettiriyorsun bilmiyorum ancak, eğer server-side bir script ile XML üretiyorsan browsera yollarken headerını XML olarak değiştirmen problemi çözebilir. IE, gelen response u text/HTML olarak algılıyorsa responseXML boş dönebilir. Oluşturduğun XML in syntax inde IE nin sevmediği bir durum olabilir. Bunları kontrol edersen hatanın nereden kaynaklandığı konusunda doğru taraf üzerine yönlenebiliriz. Eğer kod çok uzun değilse hem client hem de server tarafındaki kodu gönderebilirsen, ya da hatayı tekrarlayabildiğin küçük bir örnek yazabilirsen daha net bir şekilde yardımcı olmaya çalışırım. Kolay gelsin..
__________________
http://www.kimindir.com - Alan adı sorgulama (whois) servisi... [v0.4 beta] |
|
|
|
|
|
#5 (permalink) |
|
Üyelik Tarihi: 28.05.2001
Yer: İzmir/Ankara
Yaş: 23
Mesaj: 766
|
Re: Internet Explorer'da .documentElement sorunu [Ajax]
Ok, o zaman kodların büyük bölümünü buraya da yazayım. XML'yi ASP ile oluşturuyorum. Header bilgisini "text/XML" olarak belirtiyorum.
Bu ajax kodları: Kod:
var ajax; function LoadDocument(URL, Data, Action) { ajax = false; if (window.XMLHttpRequest) { try { ajax = new XMLHttpRequest(); } catch(e) { ajax = false; } } else if (window.ActiveXObject) { try { ajax = new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch(e) { try { ajax = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { ajax = false; } } } if (ajax) { ajax.open("POST", URL, true); ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); ajax.send(CodeForeignCharacters(Data)); ajax.onreadystatechange = OnAjaxChange(Action); } function OnAjaxChange(Action) { alert(ajax.readyState); alert(ajax.status); alert(ajax.responseText); if (ajax.readyState == 4) { if (ajax.status == 200) { if (Action == "AddNewLabel") { var rootNode = ajax.responseXML.documentElement; var users = rootNode.getElementsByTagName("label"); for(x = 0; x < users.length; x++) { alert(DecodeForeignCharacters(users[x].getAttribute('name'))); } } else if (Action == "EditLabel") { document.getElementById('LabelSelection' + ObjectID).innerHTML = document.getElementById('LabelName' + LabelID).value; document.getElementById('EditLabel' + ObjectID).style.display = "none"; document.getElementById('ShowLabel' + ObjectID).style.display = "block"; } } else { alert("XML verilerinin al1nmas1 s1ras1nda bir hata meydana geldi:\n" + ajax.statusText); } } } } Kod:
Response.ContentType = "text/XML" Session.Codepage = 1254 Session.LcId = 1055 Session.TimeOut = 155 Response.Buffer = True Response.Expires = -1 Response.ExpiresAbsolute = Now() - 2 Response.AddHeader "pragma","no-cache" Response.AddHeader "cache-control","private" %> <labels> <% SQL = "Select LabelID, LabelName From Labels Order By LabelPlace ASC" Set Labels = Connection.Execute(SQL) Do While Not Labels.Eof LabelsLabelID = Labels("LabelID") LabelsLabelName = Labels("LabelName") %> <label id="<%=LabelsLabelID%>" name="<%=CodeForeignCharacters(LabelsLabelName)%>"></label> <% Labels.MoveNext Loop Labels.Close Set Labels = Nothing %> </labels> Kod:
ajax.onreadystatechange = OnAjaxChange(Action);
Mesaj ZuLuuuuuu tarafından 14.04.2006 (06:40) yeniden düzenlendi. |
|
|
|
|
|
#6 (permalink) | |
|
Üyelik Tarihi: 28.05.2001
Yer: İzmir/Ankara
Yaş: 23
Mesaj: 766
|
Re: Internet Explorer'da .documentElement sorunu [Ajax]
Sorunda bir ilerleme kaydettim hatta çözdüm diyebilirim:
XML'yi oluştururken başa bir Kod:
Response.Write("<?XML version='1.0' encoding='ISO-8859-9'?>")
Alıntı:
![]() Yalnız hala "Tür uyumsuz" hatası alıyorum şu satırda: Kod:
ajax.onreadystatechange = OnAjaxChange(Action);
|
|
|
|
|
|
|
#7 (permalink) |
|
Üyelik Tarihi: 23.10.2005
Yer: İstanbul
Yaş: 23
Mesaj: 73
|
Re: Internet Explorer'da .documentElement sorunu [Ajax]
ajax.onreadystatechange = OnAjaxChange(Action);
Yukarıdaki satırda OnAjaxChange eventi Action parametresi ile çağrılıyor ve bunun sonucu ajax.onreadystatechange'e atılıyor. Hatanın nedeni bu olması lazım. Eğer Action gibi bir parametre kullanmamış olsan şu kodla sorun çözülür: ajax.onreadystatechange = OnAjaxChange; // Dikkat: OnAjaxChange() değil Yani fonksiyonu çağırmaktansa fonksiyonun kendisini ajax.onreadystatechange'e atıyoruz. Ama Action parametresi olunca bu nasıl yazılır onu hiç düşünmemiştim. Kötü bir çözüm olacak ama Action değişkenini parametre yapma da en başta global olarak tanımla ve öyle kullan. Aklıma daha iyi bir yöntem gelirse yazarım. Kolay gelsin.
__________________
AdSense Banka Şube Kodları • Aptal Tablolar • RapidCheck • Apache, PHP ve MySQL kurulumu • Flickr |
|
|
|
|
|
#8 (permalink) |
|
Üyelik Tarihi: 23.10.2005
Yer: İstanbul
Yaş: 23
Mesaj: 73
|
Re: Internet Explorer'da .documentElement sorunu [Ajax]
Veya şunu bir dener misin:
Kod:
var ajax; function LoadDocument(URL, Data, Action) { ajax = false; if (window.XMLHttpRequest) { try { ajax = new XMLHttpRequest(); } catch(e) { ajax = false; } } else if (window.ActiveXObject) { try { ajax = new ActiveXObject("Msxml2.XMLHTTP.3.0"); } catch(e) { try { ajax = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { ajax = false; } } } if (ajax) { ajax.open("POST", URL, true); ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); ajax.send(CodeForeignCharacters(Data)); ajax.onreadystatechange = function() { alert(ajax.readyState); alert(ajax.status); alert(ajax.responseText); if (ajax.readyState == 4) { if (ajax.status == 200) { if (Action == "AddNewLabel") { var rootNode = ajax.responseXML.documentElement; var users = rootNode.getElementsByTagName("label"); for(x = 0; x < users.length; x++) { alert(DecodeForeignCharacters(users[x].getAttribute('name'))); } } else if (Action == "EditLabel") { document.getElementById('LabelSelection' + ObjectID).innerHTML = document.getElementById('LabelName' + LabelID).value; document.getElementById('EditLabel' + ObjectID).style.display = "none"; document.getElementById('ShowLabel' + ObjectID).style.display = "block"; } } else { alert("XML verilerinin al1nmas1 s1ras1nda bir hata meydana geldi:\n" + ajax.statusText); } } }; } }
__________________
AdSense Banka Şube Kodları • Aptal Tablolar • RapidCheck • Apache, PHP ve MySQL kurulumu • Flickr |
|
|
|
Zoque'a hoşgeldiniz!