Я не уверен, что я использую правильную терминологию, но вот что я пытаюсь сделать ... У меня есть asp.net которая загружает карту Google, а затем добавляет маркеры из данных JSON, которые создаются в методе на странице с кодом. При первоначальной загрузке все работает нормально. Однако, если я вызываю функцию refreshTheMarkers() с помощью нажатия кнопки, переменная «грузовики» в функции populateTheMap (третья строка кода) не получает обновленную строку JSON, она по-прежнему остается той же строкой JSON, что и когда страница была первоначально загружен. Есть ли способ «заставить» метод ConvertDataTabletoString обновиться?Обновить элемент данных javascript из asp.net datatable без перезагрузки страницы
<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);
}
}
}
По сути то, что я хочу сделать, это перезагрузить маркеры каждые несколько секунд без перезагрузки карты Google ...
Ну, после того, как я, наконец, узнал некоторые основы о jQuery, этот ответ, наконец, имел смысл ... спасибо! –