XMLHttpRequest content-type probléma
Sziasztok!
Próbálnék egy rss hírolvasót összehozni a böngészőben (persze létező kódok alapján, JavaScriptben). A weblaboron is megjelent cikk alapján az XmlExtras csomagot is használva:
Namármost a gondom a következő:
Ha Weblabor feedet (http://weblabor.hu/rss) adom meg, akkor a content-type
Nos, ez még nem lenne baj, mondhatjátok. Ha azonban magát a feedet szeretném olvasni:
akkor a weblaboros szépen "bejön", a listapartos meg nem. Annyit már kiderítettem, hogy a listapartos feednél nincs responseXML objektum - ezt csakis a content-type különbözőségére tudom visszavezetni, ugyanis mindkettő esetében van responseText objektum, tehát a kérések rendben megtörténtek, csak a weblabor estében xml dokumentumként a másikban meg szövegként értelmezi a választ, bár a szerkezete megfelel egy XML dokumentum szerkezetének. Csakhogy a responseText objektumot nem tudom XML-ként kezelni, tehát a
Kérdéseim:
Remélem van ember, aki tud segíteni! Előre is köszi:
P][G
■ Próbálnék egy rss hírolvasót összehozni a böngészőben (persze létező kódok alapján, JavaScriptben). A weblaboron is megjelent cikk alapján az XmlExtras csomagot is használva:
function loadXMLDoc(url) {
req = new XmlHttp.create();
req.onreadystatechange = processReqChange;
req.open("POST", url, true);
req.send();
}
// onreadystatechange esemény kezelése jön
function processReqChange() {
// csak akkor, ha "loaded"
if (req.readyState == 4) {
// csak, ha "OK"
if (req.status == 200) {
alert(req.getResponseHeader("Content-Type"));//csak a teszt miatt van itt
clearTopicList();
buildTopicList();
} else {
alert("Hiba történt az XML adatok beolvasásakor:\n"+ req.statusText);
}
}
}
req = new XmlHttp.create();
req.onreadystatechange = processReqChange;
req.open("POST", url, true);
req.send();
}
// onreadystatechange esemény kezelése jön
function processReqChange() {
// csak akkor, ha "loaded"
if (req.readyState == 4) {
// csak, ha "OK"
if (req.status == 200) {
alert(req.getResponseHeader("Content-Type"));//csak a teszt miatt van itt
clearTopicList();
buildTopicList();
} else {
alert("Hiba történt az XML adatok beolvasásakor:\n"+ req.statusText);
}
}
}
Namármost a gondom a következő:
Ha Weblabor feedet (http://weblabor.hu/rss) adom meg, akkor a content-type
text/xml;charset=utf-8
. Ha a valamelyik A List Apart feedet pl.: (http://www.alistapart.com/articles.xml), akkor a content-type értéke application/rss+xml
.Nos, ez még nem lenne baj, mondhatjátok. Ha azonban magát a feedet szeretném olvasni:
var items = req.responseXML.getElementsByTagName("item");
//itt persze még folytatódik a kód, de a lényeg ez
//itt persze még folytatódik a kód, de a lényeg ez
akkor a weblaboros szépen "bejön", a listapartos meg nem. Annyit már kiderítettem, hogy a listapartos feednél nincs responseXML objektum - ezt csakis a content-type különbözőségére tudom visszavezetni, ugyanis mindkettő esetében van responseText objektum, tehát a kérések rendben megtörténtek, csak a weblabor estében xml dokumentumként a másikban meg szövegként értelmezi a választ, bár a szerkezete megfelel egy XML dokumentum szerkezetének. Csakhogy a responseText objektumot nem tudom XML-ként kezelni, tehát a
getElementsByTagName
nem használható.Kérdéseim:
- Meg tudom-e változtani a content-type-ot a művelet folyamán?
- Ha nem, miként tudom a responseText estében a kapott választ XML dokumentumként kezelni
- A responseStream és a responseBody megoldást jelenthet-e a problémára, érdemes-e azokkal is kísérletezni (szenvedni)
Remélem van ember, aki tud segíteni! Előre is köszi:
P][G
XMLHttpRequest részleges megoldás
var xmldoc=XmlDocument.create();
xmldoc.loadXML(req.responseText);
var items = xmldoc.getElementsByTagName("item");
}
else{
var items = req.responseXML.getElementsByTagName("item");
}
Ha vki esetleg tudna valami jobb megoldást, illetve magyarázatot az eredeti hozzászólásban leírtakra, azt továbbra is köszönettel veszem - már, ha vki egyáltalán olvassa ezt a fórumot :-/
Sziasztok:
P][G
Választ nem tudok...
responseText
-tel foglalkoznál, abból gyártanál mindig egyxmldoc
-ot. Nem hiszem, hogy nagyon nagy teljesítményveszteség lenne.-boogie-
Nem fogod elhinni, de próbá
P][G
...egyébként csak elvi jell
A végleges megoldást amúgy php-vel karöltve tervezem, ugyanis - terveim szerint, ha fpassthru-val olvastatom ki az eredeti feedet, és ennek az eredményét kérem le az xmlhttprequesttel, akkor az uannak a domainnek fogja hinni - remélem... szóval a forrás nem weblabor.hu/akarmi.xml lesz, hanem mondjuk www.ugyanazadomain.hu/feedreader.php?id=1, persze tömbben vagy adatbázisban tárolva az id-nek megfelelő feed. Így a php-ben reményeim szerint egy header elküldéssel be tudom állítani a content-type-ot. Persze ez még csak elméleti okoskodás, lehet, hogy a gyakorlatban egyáltalán nem fog menni...
P][G
Újabb XML gondok!
Nos ismét gondjaim adódnak a Content-type-al. Próbaképpen helyi webszerveren keresztül (localhost) szeretnék xml feed-et letölteni az XmlHttpRequest segítségével. A szerver egy KFWS, Mime szekciójában a text/xml van beállítva az xml, xsl és dtd file-okra. DE: hiába próbálnám beolvasni az xml file-t vmiért a kis szemét direkt nem text/xml-ként szolgálja ki, hanem text/html-ként. Innentől kezdve persze cseszhetem.
Kérdés miért van ez?
Kérdés kettő: miért esküszik össze állandóan minden technika az ember ellen?
Nem űrhajót akarok építen, csak egy nyamvadt szöveges file-ból kiolvasni adatokat. Ha loadXMLDoc-kal töltök be xml dokot nincs valami forceContentType vagy ilyesmi beállítás? Ha nincs miért nincs? A több ezer fejlesztő közül soha senkinek nem jutott eszébe? Mindig azon kapom magam, amikor valami hót eccerű dolgot szeretnék megoldani, hogy direkte nem lehet, valami olyan hülye viselkedés miatt, amik úgy látszik a több millió komputterfelhasználó közül még senkivel nem fordult elő - mert ha előfordult volna, gondolom már lenne rá megoldás.
Na, mindegy. A konkrét kérdéseimre konkrét válaszokat adókat meghívom, hogy vegyenek a saját pénzükön kedvenc csokijukból egy táblát, majszolása közben pedig hassa át őket a segítségadás felett miatt érzett lélekemelő öröm...
Sziasztok:
P][G
setRequestHeader
setRequestHeader
elemfüggvényt? Ha felülírod a MIME típusát, nem jön létre aresponseXML
objektum?