Разбор XML-ответа YouTube API с помощью jQuery для Google Map

Я пытаюсь разобрать ответ XML от API YouTube с помощью jQuery. Моя цель - взять URL-ссылки и данные геотегов из результатов и вставить маркеры на карту Google. Каждый маркер будет иметь встроенное видео YouTube в объекте infoWindow. Запрос API, который я отправляю серверам YouTube, запрашивает видео с данными геотегов в пределах 100 км от некоторых координат. Пока я просто работаю с локальным файлом. Есть ли у кого-нибудь предложения по синтаксическому анализу XML и добавлению видео на карту Google? В настоящее время я пробую использовать многомерный массив. Известные проблемы: Моя переменная «latLng» не определена. Этого не должно быть. Это одно из немногих моих указаний на проблему. Любой совет?

мой код:

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <style type="text/css">
        html {
            height: 100%
        }

        body {
            height: 100%;
            margin: 0px;
            padding: 0px
        }

        #map_canvas {
            height: 100%
        }
    </style>
    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true">
    </script>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js" type="text/javascript">
    </script>
    <script type="text/javascript">

        $(document).ready(function() {
            $.get("videos.xhtml", "xml", function(xml) {
                $(xml).find("entry").each(function() {
                    var id = $(this).children('id').text();
                    var content = $(this).children('content').text();
                    var vid = $(this).children("link [rel=alternate]").attr("href");
                    var location = $(this).children('georss:where').children('gml:Point').children('gml:pos').text().split(" -").join(",");

                    var marker = new Array(vid, location);
                    var markers = new Array();
                    markers.push(marker);
                    var latLng = new google.maps.LatLng(markers[0][1]);
                    var markers = new Array();
                    var myOptions = {
                        zoom: 19,
                        center: latLng,
                        mapTypeId: google.maps.MapTypeId.HYBRID
                    };
                    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

                    //var vidString = '<div style="width:450; height: 400;"><object width="425" height="355"><param name="movie" value="http://www.youtube.com/v/2A-fuFeRekE&rel=1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/2A-fuFeRekE&rel=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"></embed></object></div>';
                    //use arrays
                    for (a = 0; a < markers.length; a++) {
                        var vidArray = new Array(markers[a][0]);
                        var infoWindow = new google.maps.InfoWindow({
                            content: vidArray
                            // is not emebeded
                        });
                    }

                    for (i = 0; i < markers.length; i++) {
                        var newMarker = new google.maps.Marker({
                            position: markers[i][1],
                            map: map,
                            title: "Hello World"
                        });
                        var marker1 = Array();
                        marker1.push(newMarker);
                    }
                    for (b = 0; b < markers.length; b++) {
                        // how do I make it add more marker listener
                        google.maps.event.addListener(marker1[b], "click", function(){
                            infoWindow.open(map, marker1[b])
                        });
                    }

                    alert(vid);
                });
            });
        });

        //I need to convert to a string
    </script>
</head>
<body>
<div id="map_canvas" style="width:100%; height:100%">
</div>
</body>
</html>

person alex    schedule 16.11.2010    source источник


Ответы (1)


Что касается файла XML, вы должны знать об «той же политике происхождения». Это означает, что вы не можете загрузить файл XML или JSON с другого сервера (теоретически).

Однако jQuery предлагает jsonP-функцию, чтобы обойти это, или вы можете попробовать альтернативный скрипт jquery-jsonp.

http://api.jquery.com/jQuery.ajax/ https: // code. google.com/p/jquery-jsonp/

до свидания.

person Thomas    schedule 18.11.2010
comment
Спасибо, я знаю об этом ограничении, но пока я использую статический XML-файл на моем жестком диске. Я просто пытаюсь заставить концепцию работать. Есть предложения по поводу самого моего кода? - person alex; 04.12.2010