PHP ve XML ile ajax, getElementsByTagName IE sorunu

3 Cevap php

Ben IE getElementsByTagName ile bir sorunu olan (7 ve 8). Ediyorum

Daha sonra istenen oturum değişkeni döndüren bir AJAX işlevi kullanılarak erişilen bir PHP oturum değişkeni içine (XML dizesi gibi) önerilen her adresini döndürür bir adres arama var.

Her oturum değişken (I karakter kodlama olmadan ve utf-8 ile birlikte denedim) ajax adres arama 1. adımda ayarlanır:

$_SESSION['addrHint_' . $k1] = '<?xml version="1.0" encoding="ISO-8859-1"?>';
$_SESSION['addrHint_' . $k1] .= '<Address>';
$_SESSION['addrHint_' . $k1] .= '<Postcode>' . $v1->Postcode . ' </Postcode>';
$_SESSION['addrHint_' . $k1] .= '<Line1>' . $v1->Line1 . ' </Line1>';
$_SESSION['addrHint_' . $k1] .= '<Line2>' . $v1->Line2 . ' </Line2>';
$_SESSION['addrHint_' . $k1] .= '<Line3>' . $v1->Line3 . ' </Line3>';
$_SESSION['addrHint_' . $k1] .= '</Address>';

Ve sonra 2. adımda alınan:

header('Content-Type: text/xml');
print_r( $_SESSION['addrHint_'.$_REQUEST['addr']] );

Devlet hazır olduğunda AJAX js, o, bu kodun diğer benzer satırları arasında gerçekleştirir:

var xmlDoc = xmlHttp.responseXML;
var xmlRoot = xmlDoc.documentElement;
var postcode = xmlRoot.getElementsByTagName("Postcode")[0].childNodes[0].nodeValue;
document.forms[0]["address"+addr+"_Postcode"].value = postcode.substring(0, postcode.length-1);

(Bu adresi her bir hat için benzer bir şey yapar.) Ben bir elemanın boş iken ben olmamdı bir sorunu durdurmak için her öğe için bir alan eklemek zorunda çünkü uzunluk-1 pasajı orada.

O değil de, tüm IE, Firefox çalışıyor. Ben beri Googling ve ilk 5 sayfalarında ama hiçbir çözümleri arasında sonuçların bir dizi bulundu. Herkes bu ışık döken eğer ben çok minnettar olurum.

Şimdiden teşekkürler.

3 Cevap

Bunun yerine dönüş değerlerini değiştirerek, belki düğüm değerlerini getirir kodu etrafındaki bazı hata denetimi uygulamalıdır.

If you do a ton of chaining you can't check for nulls. Instead of chaining like this:

xmlRoot.getElementsByTagName("Postcode")[0].childNodes[0].nodeValue

Why not add some error checking before hand? Something like:

var postCodes = xmlRoot.getElementsByTagName("Postcode");
if( postCodes && postCodes[0] && postCodes[0].childNodes[0] ) {
    document.forms[0]["address"+addr+"_Postcode"].value = postCodes[0].childNodes[0].childNodes[0].nodeValue;
}

Hiçbir veri varsa bu şekilde sadece atama deneriz. Eğer bunu beklemek, boş bir giriş değerini alınıyor.

Şimdi, tüm bu zincirleme ve deyim yorucu alabilirsiniz, bu yüzden eğer isterseniz bir fonksiyonu olduğunu sarın eğer.

Burada bir çalışma örneği kontrol etmek için çekinmeyin: http://jsbin.com/ahidu

Şerefe!

print_r??

print_r( $_SESSION['addrHint_'.$_REQUEST['addr']] );

"$ SESSION['addrHint '. $ _REQUEST [' Adres ']]" bir dizi değil.

Benim yorum başı olarak, ben beri her adres alanına 'null' ekledik. Bu alan yeterli değildi görünüyor. Ben substring (0, String.length-5) çalışır ile kombine edildiğinde, bu belki de en zarif çözüm değil ama takdir.