2010-09-06 87 views
0

我有一个xml文件,其中包含用于对Google进行地理编码请求的URL。我想遍历文件,获取URL(以及后来的网站名称......一次一个步骤),然后向Google发送地理编码请求以获取响应中的经纬度和经度。我遇到了$ .ajax GET请求的问题。 URL参数不能只是包含我的链接的数组中的值吗?看到我的代码如下。感谢您的帮助!

$(document).ready(
    function() { 

    $locArray = new Array(); 
    $coorsArray = new Array(); 

    $.ajax({ 
     type: 'GET', 
     url: 'data.xml', 
     dataType: 'xml', 
     success: function(d){ 


      $(d).find('record').each(function(){ 

       var $record = $(this); 
       var site = $record.find('site_name').text(); 
       var $maplink = $record.find('maplink').text(); 


       $locArray.push($maplink);   

      }) 

      $($locArray).each(
       function() { 
       $.ajax({ 
        type: 'GET', 
        url: this, 
        dataType: 'xml', 
        success: function(d) { 
         $(d).find('location').each(function() { 
          var $location = $(this); 
          var $latcoor = $location.find('lat').text(); 
          var $longcoor = $location.find('lng').text(); 
          var $fullcoors = $latcoor + ", " + $longcoor; 

          console.log($latcoor); 

          $coorsArray.push($fullcoors); 
          //console.log($coorsArray); 

         }) 

         $($coorsArray).each(
          function(){ 
          $('ul').append("<li>" + this + "</li>\n"); 
          }) 

        } 
       }) 
       } 
      ); 



      } 


     }); 

}); 

回答

3

您无法向除您自己以外的域启动AJAX请求。这是为了防止XSS攻击。请参阅Same Origin Policy

如果您想要从Google获取数据,请在您自己的域上设置代理,以反映Google的回复或直接在您的服务器上请求。

此外,由于您似乎对相同的URL列表进行地理编码,为什么不简单地对它们进行地理编码并缓存结果呢?

谷歌以前支持JSONP,但由于滥用,JSONP support was dropped

+0

谢谢。我将创建一个php脚本,看看我能否与Geocoder进行交互。基本上,我想混合我的Quickbase数据库(使用他们的API)和谷歌地图的数据。 Quickbase确实有一个PHP SDK,可以帮助我完成这一部分。谢谢你的帮助。 – 2010-09-07 04:35:31

1

使用V3地图api这似乎很简单...跨域不是问题,因为谷歌与json请求工作...这是一些最近的代码片段,它应该给你一些指针在哪里看在谷歌地图api。

var $search = jQuery('input#adresse'); 
var geocoder = new google.maps.Geocoder(); 
var Lat; 
var Lng; 
function addressSearcher(){ 
    if (geocoder) { 
     inprogress = true; 
     geocoder.geocode({ 
      address: $search.val() 
     },function(results, status){   
      if (status == google.maps.GeocoderStatus.OK 
       && results.length < 3 
       && results[0].types[0] == 'street_address'){ 
       var loc = results[0].geometry.location;  
       Lat = loc.b; 
       Lng = loc.c; 
       $search.val(results[0].formatted_address); 
      } 
     }) 
    } 
}