从数据表重新加载 javascript 数据元素 asp.net 而不重新加载页面

Reload a javascript data element from asp.net datatable without reloading the page

本文关键字:加载 新加载 net javascript 数据表 数据 元素 asp      更新时间:2023-09-26

>我不确定我是否使用了正确的术语,但这是我正在尝试做的...我有一个 asp.net 页面,该页面加载谷歌地图,然后从代码隐藏页面上的方法中创建的 JSON 数据添加标记。 最初加载时一切正常。 但是,如果我通过单击按钮调用函数 refreshTheMarkers(),则 populateTheMap 函数(第三行代码)中的"卡车"变量不会获得更新的 JSON 字符串,它仍然是与最初加载页面时的 JSON 字符串相同。 有没有办法"强制"刷新 ConvertDataTabletoString 方法?

<script type="text/javascript">
    var map;
    var infoWindow;
    var markersArray = [];
    var sbarDiv;
    var trucks;
    function initialize() {
        var mapOptions = {
            center: new google.maps.LatLng(50.08, -82.8),
            zoom: 11,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        infoWindow = new google.maps.InfoWindow();
        map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
        sbarDiv = document.getElementById('sbDivMain');
        populateTheMap(true);
    }
    function populateTheMap(onStartup) {
        clearExistingMarkers();
        var sbarhtml = '';
        trucks = JSON.parse('<%=ConvertDataTabletoString() %>');
        var bounds = new google.maps.LatLngBounds();
        for (var i = 0; i < trucks.length; i++) {
            var truck = trucks[i];
            var point = new google.maps.LatLng(parseFloat(truck.Latitude), parseFloat(truck.Longitude));
            bounds.extend(point);
            var marker = createMarker(point, truck);
            var sidebarEntry = createSidebarEntry(marker, truck);
            sbarDiv.appendChild(sidebarEntry);
        }
        // Center the map only on startup
        if (onStartup) {
            var pointCenter = bounds.getCenter();
            var iZoomLevel = map.fitBounds(bounds);
            if (iZoomLevel > 15) { iZoomLevel = 15; }
            map.setCenter(pointCenter, iZoomLevel);
        }
    }
    function refreshTheMarkers() {
        clearExistingMarkers();
        populateTheMap(false);
    }
    function clearExistingMarkers() {
        if (markersArray) {
            for (i in markersArray) {
                markersArray[i].setMap(null);
            }
            markersArray.length = 0;
        }
        //clear side bar entries
        sbarDiv.innerHTML = '';
    }
// plus some additional code...

这是代码隐藏页面...

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
namespace LiveCadWebApp
{
    public partial class GPSTracking : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
        // Convert the DataTable to a JSON string
        public string ConvertDataTabletoString()
        {
            DataTable dt = new DataTable();
            using (SqlConnection con = new SqlConnection(@"Server=.'SQLExpress;Database=MyDatabase;Trusted_Connection=True;"))
            {
                using (SqlCommand cmd = new SqlCommand("SELECT * FROM vwTruckGPSStatusInformation", con))
                {
                    con.Open();
                    SqlDataAdapter da = new SqlDataAdapter(cmd);
                    da.Fill(dt);
                    return GetJSONFromDataTable(dt);
                }
            }
        }

从本质上讲,我想做的是每隔几秒钟重新加载一次标记,而无需重新加载谷歌地图......

你对 web 方法进行 ajax 调用以获取更新的 json

查看这些示例http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/