使用jQuery从asp.net响应中重新获取JSON值

时间:2013-01-03 13:42:16

标签: javascript asp.net json jquery

我正在做一个小项目。主要是为了获得一些理解,因为我是一个完整的网络菜鸟。在以下问题中可能会或可能不会显而易见。

我的最终结果是从数据库中获取一堆值。将它们放入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是正确的。我将响应复制并粘贴到另一个函数中,绘图仪将两个图钉放在我的地图上。

  1. 代码似乎没有进入$.getJSON函数。

  2. 我的getMarkers.aspx设置方式与IE7(或一般问题)存在问题。谷歌搜索一些教程,这是我最终的地方。我的方法可能完全错了。或者我错过了我应该做的事情。我似乎无法找到那个具体的教程,它在我激烈的2天中一定是在意外关闭并且算上Google冒险。

  3. Firefox getMarkers.aspx将JSON显示为第一行,后跟html。只是浏览器中的纯文本。

    IE7显示XML错误,并告诉我文档顶层不允许使用JSON字符串。我确实读过一些关于IE7的文章,总是试图通过精心设计的解决方法来解析XML。我不能这样做,因为我不知道有多少客户会使用它。有没有更好的方法来做我正在做的事情?

    如果有人能指出我需要走的方向,我会非常感激。希望我的帖子不会太复杂。

3 个答案:

答案 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") });
});
}