我正在做一个小项目。主要是为了获得一些理解,因为我是一个完整的网络菜鸟。在以下问题中可能会或可能不会显而易见。
我的最终结果是从数据库中获取一堆值。将它们放入JSON对象,然后使用一些jQuery / JavaScript来处理数据。我一直在做大量的阅读,在这里通过大量的帖子,但我找不到与我的问题有关的东西。
我在VS2010 C#工作。我受客户端的IE7约束,但我可以用Firefox测试。我现在也在localHost
工作。
我的JavaScript如下。
function plotMarkers() {
var pathStart = new String(window.location);
var newPath = pathStart.replace("Default.aspx", "getMarkers.aspx");
alert(newPath);
$("#statusDiv").html('<a href="' + newPath + '">JSON Data</a>');
$.getJSON(newPath, function (data) {
alert("Loading JSON");
$.each(data, function (index, elem) {
var myLatlng = new google.maps.LatLng(elem.lat, elem.lng);
var marker = new gogle.maps.Marker({
position: myLatlng,
title: elem.title
});
marker.setMap(map);
});
}, function () { alert("loaded") });}
我在Firefox中没有得到任何Javascript错误,但我在IE7中做错了。 alert("Loading JSON")
永远不会在任何地方发射。我从未见过它。
我的getMarkers.aspx代码
public partial class getMarkers : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {
JavaScriptSerializer jsonSer = new JavaScriptSerializer();
List<marker> markerList = new List<marker>();
markerList.Add(new marker(-34.397, 150.644, "Test"));
markerList.Add(new marker(-50, 150.644, "Test2"));
string sJSON = jsonSer.Serialize(markerList);
Response.ContentType = "application/json";
Response.Write(sJSON);
}
}
我可以点击“statusDiv”中的链接,然后转到aspx页面。我在IE7中遇到错误但在Firefox中工作正常。在这些页面中解析回来的JSON是正确的。我将响应复制并粘贴到另一个函数中,绘图仪将两个图钉放在我的地图上。
代码似乎没有进入$.getJSON
函数。
我的getMarkers.aspx
设置方式与IE7(或一般问题)存在问题。谷歌搜索一些教程,这是我最终的地方。我的方法可能完全错了。或者我错过了我应该做的事情。我似乎无法找到那个具体的教程,它在我激烈的2天中一定是在意外关闭并且算上Google冒险。
Firefox getMarkers.aspx
将JSON显示为第一行,后跟html。只是浏览器中的纯文本。
IE7显示XML错误,并告诉我文档顶层不允许使用JSON字符串。我确实读过一些关于IE7的文章,总是试图通过精心设计的解决方法来解析XML。我不能这样做,因为我不知道有多少客户会使用它。有没有更好的方法来做我正在做的事情?
如果有人能指出我需要走的方向,我会非常感激。希望我的帖子不会太复杂。
答案 0 :(得分:1)
您可能需要在页面加载方法结束时使用Response.End(),以便在您的JSON之后不会呈现网页的其余部分。
答案 1 :(得分:0)
首先,我认为您需要json2库来处理IE7的问题。
至于触发你的函数 - 我无法看到实际调用plotMarkers()的地方,它只是定义了吗?
答案 2 :(得分:0)
单击#statusDiv链接时,您是否尝试在现有页面的地图上显示标记? 如果是这样,你做错了:不要在#statusDiv中放一个链接,只需确保点击它时调用getJSON函数。试试这个:
function plotMarkers() {
var pathStart = new String(window.location);
var newPath = pathStart.replace("Default.aspx", "getMarkers.aspx");
alert(newPath);
$("#statusDiv").text('JSON Data');
$("#statusDiv").on('click',function(){
$.getJSON(newPath, function (data) {
alert("Loading JSON");
$.each(data, function (index, elem) {
var myLatlng = new google.maps.LatLng(elem.lat, elem.lng);
var marker = new gogle.maps.Marker({
position: myLatlng,
title: elem.title
});
marker.setMap(map);
});
}, function () { alert("loaded") });
});
}