2010-09-06 98 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); 
      } 
     }) 
    } 
}