【发布时间】:2017-07-14 11:09:06
【问题描述】:
我有一个基于代码隐藏数据检索器存储图标的 javascript。我循环地图脚本以在客户端刷新地图。我让脚本每隔一段时间重新触发就好了。但它需要重新触发后面代码中服务器端的数据检索器。我喜欢使用页面方法的想法,但不能完全连接 - 我背后代码中的方法似乎只会在我重新加载刷新并且我不想要那个时触发。
理想情况下,在 javascript 的开头是我希望数据检索与 javascript 执行一起重新触发的位置。
所需的顺序是:数据刷新 -> 地图图标重新定位
这是我的 javascript - 带有注释行,说明我认为数据检索器重新触发的位置应按顺序发生。
<script type="text/javascript">
// map creation - setup
var mapbaselayerholder = "mapbox.streets";
var TeleMaticsIcon = L.icon({ iconUrl: '../../MapIcons/truck23.png', });
var addressPointsTeleMatics = '';
var MarkersAsClustersForTeleMatics = '';
addressPointsTeleMatics = '';
MarkersAsClustersForTeleMatics = '';
L.mapbox.accessToken = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
var DaveMap = L.mapbox.map('mapMine', mapbaselayerholder)
.setView([41.874116, -87.664099], 5);
var options = L.control.layers({
'Street': L.mapbox.tileLayer('mapbox.streets'),
'SatStr': L.mapbox.tileLayer('mapbox.streets-satellite'),
}).setPosition('topleft').addTo(DaveMap);
//THIS IS THE START OF THE JS on a TIMER (as per the interval in the setTimeout line at the bottom of the script)
display();
function display()
{
//THIS IS WHERE I THINK/GUESS the re-freshing of the code-behind data retriever should be fired
// the code-behind method that retrieves the data is in the next line (TeleMatics())
addressPointsTeleMatics = JSON.parse('<%=TeleMatics() %>');
MarkersAsClustersForTeleMatics = new L.MarkerClusterGroup({ showCoverageOnHover: true, maxClusterRadius: 15, spiderfyOnMaxZoom: true });
// TeleMatics Grab Loop
for (var i = 0; i < addressPointsTeleMatics.length; i++) {
var V = '';
V = addressPointsTeleMatics[i];
markerTeleMatics = L.marker(new L.LatLng(V.Latitude, V.Longitude), { icon: TeleMaticsIcon, title: 'Truck # ' + V.vehicleID }).addTo(DaveMap);
MarkersAsClustersForTeleMatics.addLayer(markerTeleMatics);
}
// Actually Display the Propagated Layers that have been populated from the FOR loops for each icon set
DaveMap.addLayer(MarkersAsClustersForTeleMatics);
setTimeout("display()", 5000);
}
</script>
这是我需要重新解雇的代码隐藏方法本身
[System.Web.Services.WebMethod]
public static string TeleMatics()
{
{
DataTable dt = new DataTable();
SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Wayne01"].ConnectionString);
string CompanyAllString = "Select vehicleID, Latitude, Longitude from Vehicles WHERE Latitude IS NOT NULL AND LONGITUDE IS NOT NULL AND Division = @Division and Terminal = @Terminal and vehicleID LIKE '1334'";
var CompanyAll = CompanyAllString;
//var Division = "PET";
//var Terminal = "RSM";
using (SqlCommand cmd = new SqlCommand(CompanyAll, con))
{
con.Open();
SqlDataAdapter da = new SqlDataAdapter(cmd);
cmd.Parameters.AddWithValue("@Division", Division);
cmd.Parameters.AddWithValue("@Terminal", Terminal);
da.Fill(dt);
System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
Dictionary<string, object> row;
foreach (DataRow dr in dt.Rows)
{
row = new Dictionary<string, object>();
foreach (DataColumn col in dt.Columns)
{
row.Add(col.ColumnName, dr[col]);
}
rows.Add(row);
}
return serializer.Serialize(rows);
}
}
}
【问题讨论】:
标签: javascript asp.net methods code-behind