【问题标题】:passing values in script using AJAX使用 AJAX 在脚本中传递值
【发布时间】:2014-01-05 16:47:38
【问题描述】:

我认为这只是我缺乏编写脚本的经验。 我正在尝试使用 AJAXGoogle 地图标记 从标记中获取 latlong 以向数据库,以便我可以在地图下方填充表格。
我似乎能够获取latlong,但我似乎无法将其传递给发出新请求的页面。我已经测试以确保我收到带有警报的lat/long,并且我收到了。

但我似乎找不到将其传递给请求的正确语法。

我也在用 Classic 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。但我正在尝试将lat 传递给lname

我也尝试过类似的方法 "demo_get2.asp?fname=Henry&lname=" + location.lat()
但这也不起作用。

作为一个附带问题。我一直在使用 W3schools 作为一些代码示例的来源。 (因此这里的变量名选择不佳。我会清理它)但在他们的一些示例中,列出了诸如demo_get2.asp 之类的文件。我无法找到这些文件所在的位置以查看代码的确切位置。在上面的例子中,我创建了自己的文件,它只是读取两个值并将它们显示在页面上。有用。但是对于其他示例,我有兴趣查看他们在示例中的实际代码。我似乎找不到他们在哪里分享这些。在 TryIt 示例中,我也没有找到它。

【问题讨论】:

    标签: javascript ajax google-maps asp-classic


    【解决方案1】:

    虽然使用 JavaScript 的基本 XMLHttp 请求非常好,但我还是愿意为您提供 jQuery $.ajax。使用 Classic 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;
    

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      把你的变量从字符串中取出,应该没问题;)

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

      ..好吧,现在我阅读了您的其余帖子...如果这也不起作用-可能是因为您在对象“位置”的属性“lat”名称后有“()”。

      ...不,我又错了:) ...这是一种方法...而且这条线确实应该有效,您需要准确说明您的代码中哪些无效。 AJAX 什么都不发送?发送错误数据/后端 ASP 文件接收错误数据? ...您应该在浏览器的控制台中找到这些问题的所有答案(按 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 脚本。

      【讨论】:

      • 我把这行代码改成了 xmlhttp.open("GET","demo_get2.asp?fname=Henry&lname=" + location.lat,true);结果输出是 Henry function(){return this[a]} 所以我认为这还不是很正确
      • 在我给出的原始示例中,myDiv 元素的输出看起来像 Henry location.lat() 我尝试了您的示例并向您展示了输出。元素 myDiv 已经输出了 Henry function(){return this[a]} 我有点期待像 Henry 43.2134534
      • 你没有注意到我的编辑 - 我在上面的答案中添加了一些行。我自己检查了代码,它确实有效 - 你应该得到你所期望的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-14
      • 2015-08-07
      • 2016-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多