0

私はあちこちを検索し、問題の他の原因を見つけようとしましたが、役に立ちませんでした。xml データを取得するための検索フォームがあり、データは素晴らしいものに戻ってきます。

応答ヘッダー

Content-Type text/xml;charset=utf-8 Date Fri, 04 Jan 2013 19:00:52 GMT Server Apache Transfer-Encoding チャンク経由 1.1 decfpxy1 (NetCache NetApp/6.0.2)

応答:

<markers><marker id="1" lat="48.153938" lng="17.108459" /></markers>

ただし、私のdata変数は、マーカーをロードするスクリプトに何も挿入せず、次のエラーが発生します。

TypeError: xml が定義されていません [このエラーでブレーク]

var マーカー = xml.documentElement.getElementsByTagName("マーカー");

これはコードです:

function SendData() {




    var FromDateUnformatted = $('#from').val().split('/');
    var FromDate = FromDateUnformatted[2] + '-' + FromDateUnformatted[0] + '-' + FromDateUnformatted[1] + ' 00:00:00';
    var ToDateUnformatted = $("#to").val().split('/');
    var ToDate = ToDateUnformatted[2] + '-' + ToDateUnformatted[0] + '-' + ToDateUnformatted[1] + ' 23:59:59';
    var MusicStyles = $("#music").val();
    var Locations = $("#locations").val();
    var FromPrice = $("#entrance-price").slider("values", 0);
    var ToPrice = $("#entrance-price").slider("values", 1);
    var IsOutdoors = +$('#IsOutdoors').is(':checked');
    var HasPatio = +$('#HasPatio').is(':checked');


    $.ajax({
        type: "POST",
        url: "MapSearchxml.php",
        data: {
            dataFromDate: FromDate,
            dataToDate: ToDate,
            dataMusicStyles: MusicStyles,
            dataLocations: Locations,
            dataFromPrice: FromPrice,
            dataToPrice: ToPrice,
            dataIsOutdoors: IsOutdoors,
            dataHasPatio: HasPatio
        },
        beforeSend: function (html) { // this happens before actual call
            $("#results").html('Please Wait');
            $("#searchresults").show();
            $(".phpFromDate").html(FromDate);
        },
        success: function (data) {
            //clearOverlays();
            var xml = data.responseXML;
            var markers = xml.documentElement.getElementsByTagName("marker");

            for (var i = 0; i < markers.length; i++) {
                var name = markers[i].getAttribute("id");
                var point = new google.maps.LatLng(
                parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));

                var html = "<b>" + point + "</b>hello <br/>";
                var icon = new google.maps.MarkerImage("redmarker.png");

                var marker = new google.maps.Marker({
                    map: map,
                    position: point,
                    icon: icon.icon,
                    shadow: icon.shadow
                });

                bindInfoWindow(marker, map, infoWindow, html);
            }
        }
    });



    function bindInfoWindow(marker, map, infoWindow, html) {
        google.maps.event.addListener(marker, 'click', function () {
            infoWindow.setContent(html);
            infoWindow.open(map, marker);
        });
    }

}

PHPファイル自体は次のとおりです。

$result = mysql_query($query);
if (!$result) {
  die('Invalid query: ' . mysql_error());
}


header("Content-type: text/xml");

echo '<markers>';

while ($row = @mysql_fetch_assoc($result)){
  echo '<marker ';
  echo 'id="' . parseToXML($row['ID']) . '" ';
  echo 'lat="' . parseToXML($row['LAT']) . '" ';
  echo 'lng="' . parseToXML($row['LNG']) . '" ';
  echo '/>';
}

echo '</markers>';

このコードのバリエーションを使用して静的 xml php ファイルを問題なく取得しましたが、このコードでは、この投稿から結果を取得してマーカー ビルダーに正しく挿入することができません。

私はこことグーグルで大量の調査を行ってきましたが、どこにも代替手段が見つからないようです。

問題が何であるか知っていますか?

ありがとう

4

2 に答える 2

3

success-callback に提供される最初の引数は (jq)XHR オブジェクトではなく、データです (リクエストに応じて、これは文字列、オブジェクトに解析された JSON 文字列、またはドキュメント) です。

それらのどれもプロパティを持ちませんresponseXML

したがって、ドキュメントを直接使用できます。

var xml = data;

または、3 番目の引数を使用します。

success: function (data,status,jqXHR) {
         var xml = jqXHR.responseXML;
         //....
         }

But whatever you do, you better specify the dataType:'xml' for the request, to be sure that the successfully result will be an xml-document .

于 2013-01-04T20:07:46.263 に答える
2

「マップ」変数は onload 関数に対してローカルであり、AJAX コールバック ルーチンが実行されるグローバル コンテキストでは使用できないため、ここで使用すると正しく定義されません。

                var marker = new google.maps.Marker({
                map: map,
                position: point,
                icon: icon.icon,
                shadow: icon.shadow
            });

グローバルにするvar map;には、グローバル コンテキスト (関数の外側) で a を実行してから、onload 関数で初期化します (現在のように、その前から「var」を削除するだけです)。

于 2013-01-04T21:21:40.223 に答える