1

getElementsByTagName に問題があります。ajax を使用して、サーバーから受け取った xml ファイルから情報を取得しようとしています。IE では正常に動作しますが、Chrome または FireFox で実行しようとすると、「未定義」が表示されます。

Javascript :

function parseMessage()
{
    doc = request.responseXML;
    sum = "";

    for (var i=0; i< doc.getElementsByTagName('coupon').length; i=i+1)
    {
        var lat2 = doc.documentElement.getElementsByTagName('latitude').item(i).text;
        var longi2 = doc.documentElement.getElementsByTagName('longitude').item(i).text;
        var latlng  = new google.maps.LatLng( lat2 , longi2 ); 
        var product =  doc.documentElement.getElementsByTagName('productname').item(i).text;
        // marker[i] = createMarker(map2, product, latlng, description);

        sum = sum + description+ " "+ product + lat2 + longi2;                          
    }

    document.write(sum);
}           

XML :

<?xml version="1.0" encoding="UTF-8"?>
-<coupons>
-<coupon id="1">
<productname>Bigmac</productname>
<companyname>Macdonalds</companyname>
<latitude>32.015954</latitude>
<longitude>34.755228</longitude>
</coupon>
-<coupon id="2">
<productname>Crocs</productname>
<companyname>Crocs</companyname>
<latitude>32.079375</latitude>
<longitude>34.769325</longitude>
</coupon>
-<coupon id="3">
<productname>Nike Shoks</productname>
<companyname>NIKE</companyname>
<latitude>32.048825</latitude>
<longitude>34.785461</longitude>
</coupon>
-<coupon id="4">
.....
4

1 に答える 1

6

最初の問題はgetElementsByTagName()、要素のリストを返すことです。これはグループとして操作できないため、作業する特定のノードを選択する必要があります。

getElementsByTagName('latitude')[0]; // for the first element.

2 番目の問題は次のとおりです。

getElementsByTagName('latitude')[0].item(i);

特定の要素のプロパティまたは属性にアクセスするために使用する必要があり、item(i)どちらでもありませんが、表示されていない場所で設定/使用されている可能性があります。

要素の子の 1 つにアクセスしようとしている場合 (投稿されたコードでは、latitude要素に子がありません)、次を使用できます。

getElementsByTagName('latitude')[0].childNodes[i];

またtext()、プレーンな JavaScript では何も返さず、何も実行しません。jQuery text()メソッドを使用している場合、それは jQuery オブジェクトでのみ機能します。現在のノードのテキスト コンテンツにアクセスしようとしている場合は、次のようになります。

getElementsByTagName('latitude')[0].textContent; // for Firefox, Chrome...

または:

getElementsByTagName('latitude')[0].innerText; // for IE
于 2012-07-29T18:34:29.327 に答える