2014-01-05 53 views
0

我認爲這只是我在腳本體驗中缺乏寫作。 我試圖使用AJAX谷歌地圖標記latlong從標記進行到數據庫的請求,以便我可以填充地圖下面的表格。
我似乎能夠抓住latlong,但我似乎無法將它傳遞給發出新請求的頁面。我已經測試過,以確保我得到了帶有警報的lat/long,並且我得到了它。使用AJAX在腳本中傳遞值

但我似乎無法找到正確的語法將它傳遞給請求。

另外我寫在經典ASP。我將不勝感激幫助我使用這種語言的回覆,而不是我轉移到ASP.NET的建議我正朝着這個方向前進,但現在這就是我如何去做的。

<script type="text/javascript"> 
    var j =0; 
    var sites = <%=overallpass%>; 

    function setMarkers(map, markers) { 

    for (var i = 0; i < markers.length; i++) { 
     var sites = markers[i]; 
     var siteLatLng = new google.maps.LatLng(sites[1], sites[2]); 
     var theicon = sites[5]; 
     var marker = new google.maps.Marker({ 
      position: siteLatLng, 
      map: map, 
      title: sites[0], 
      zIndex: sites[3], 
      html: sites[4], 
      icon: sites[5] 
     }); 

     var contentString = "Some content"; 

     var infowindow = new google.maps.InfoWindow({ 
      content: contentString 
     }); 

     google.maps.event.addListener(marker, "click", function(event) { 
      loadXMLDoc(event.latLng) 
     }); 

    } 
    } 
</script> 
<script> 
function loadXMLDoc(location) 
{ 
var xmlhttp; 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText; 
    } 
    } 
    xmlhttp.open("GET","demo_get2.asp?fname=Henry&lname=location.lat()",true); 
    xmlhttp.send(); 

} 
</script> 

xmlhtpp.open聲明就是我想要的lat/long傳遞到demo_get2.asp文件。在這個例子中,我有一段文字正確地傳遞給fname。但我試圖通過latlname

我也嘗試過這樣的事情 「demo_get2.asp?FNAME =亨利& L-NAME =」 + location.lat()
但這也不管用。

作爲一個側面的問題。我一直在使用W3school作爲一些代碼示例的源代碼。 (因此在這裏變量名稱的選擇很差,我會把它清理乾淨),但是在他們的一些例子中列出了一些文件,例如demo_get2.asp。我無法找到這些文件的位置,以查看代碼的準確性。在上面的例子中,我創建了自己的文件,它只是讀取這兩個值並將它們顯示在頁面上。有用。但是對於其他示例,我很感興趣的是看到他們的示例中包含的實際代碼。我似乎無法找到他們分享這些東西的地方。在TryIt的例子中,我也沒有找到它。

回答

0

把你變出來的字符串,它應該是好的;)

xmlhttp.open("GET","demo_get2.asp?fname=Henry&lname=" + location.lat(), true); 

現在..well看了你的帖子的其餘部分。如果這不工作也 - 這可能是因爲在對象「位置」的屬性「lat」的名稱後面有「()」。

...不,我再次錯了:) ...這是一種方法...這條線真的應該工作,你需要確切地說明你的代碼中沒有工作。 AJAX不發送任何東西?錯誤的數據正在發送/後端ASP文件recives錯誤的數據? ...在瀏覽器的控制檯中找到所有這些問題的答案(按f12打開它,然後加載/重新加載頁面,創建一個新標記並查看「腳本」和「網絡」選項卡安慰)。

...您的評論後 - 我想我知道是什麼問題..

嘗試監聽器改成這樣:

google.maps.event.addListener(marker, "click", loadXMLDoc)); 

,改變你的函數的開頭:

function loadXMLDoc(e) { 
    if (!e) var e = window.event; 
    var locationLat = e.latLng.lat(); 
    var locationLng = e.latLng.lng(); 

現在你建立你的查詢字符串這樣的:

xmlhttp.open("GET","demo_get2.asp?fname=Henry&lname="+locationLat,true); 

它應該工作 - 它會將緯度傳遞給你的ASP腳本。

+0

我將代碼行更改爲 xmlhttp.open(「GET」,「demo_get2.asp?fname = Henry&lname =」+ location.lat,true); 和輸出結果是亨利函數(){返回此[A]} 所以我不認爲這是完全正確但 – user1968084

+0

我會放一個編輯,我的答案... –

+0

在我把原來的例子結果有myDiv元素的輸出看起來像 亨利location.lat() 我試着你的例子,並顯示你的輸出。元素myDiv出了 亨利功能(){返回這[a]} 我有點期待像 亨利43.2134534 – user1968084

0

儘管使用JavaScript的基本XMLHttp請求非常好,但爲此我希望爲您提供jQuery $ .ajax。使用經典ASP令人難以置信的簡單,直觀和易於使用。

您需要的是生成一個JSON對象,作爲來自爲您提供數據的外部AJAX頁面的響應。這一類東西(這是 「demo_get2.asp」):

Response.ContentType = "application/json" 
lat = Request.QueryString("lat") 
lng = Request.QueryString("lng") 
Set lRS = Conn.execute("SELECT FirstName, LastName FROM SomeTable WHERE...") 
if not lRS.eof then 
    results_fName = lRS("FirstName") 
    results_lName = lRS("LastName") 
end if 
Response.Write("{""fName:"" & "" & results_fName & "",""lName:"" & results_lName & ""}") 
Response.End 

本頁面的響應將是一個JSON字符串:

{ "fName": "John", "lName": "Smith" } 

你的JavaScript應該是這一類東西:

<script src="jquery-1.9.1.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
function loadXMLDoc(location) { 
    // forming an address with the parameters as query string, 
    // note that the query string variable names are correspondent to those 
    // that are read in "demo_get2.asp": 
    var address = "demo_get2.asp?lat=" + location.lat() + "&lng=" + location.lng(); 
    var xhRequest = $.ajax({ 
     url: address, 
     type: "GET", 
     data: null, // you can also pass the input as a JSON string instead 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function (jsonResult) { 
      return jsonResult; 
      // This is the JSON object formed by the response of 
      // demo_get2.asp 
     }, 
     error: function (error) { 
      alert("Something bad just happened: " + error); 
     } 
    }); 
} 
</script> 

通過Ajax請求返回的jsonResult對象可以用我們給在「demo_get2.asp」 JSON字符串中的元素的名稱中使用:

var firstNameString = jsonResult.fName; 
var lastNameString = jsonResult.lName; 

希望它有幫助。