【问题标题】:Retriving JSON values from asp.net response with jQuery使用 jQuery 从 asp.net 响应中检索 JSON 值
【发布时间】:2013-01-03 13:42:15
【问题描述】:

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

我的最终结果是从数据库中获取一堆值。将它们放入 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 冒险中意外关闭的。

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

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

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

【问题讨论】:

    标签: javascript asp.net json jquery


    【解决方案1】:

    您可能希望在页面加载方法结束时使用 Response.End(),以便在 JSON 之后不会呈现网页的其余部分。

    【讨论】:

    • 最好还是使用 HttpHandler,因为它的重量要轻得多。
    • 如果使用 .NET 4.5 则为 WebAPI :)
    • 就是这样。我仍然在 IE 中遇到 JS 错误,但它会运行并绘图。说得通。我假设它试图将所有 HTML 解析为 JSON,然后它就失败了。 (我接近了吗?)非常感谢!
    • 在添加 Response.End() 之前,您的 .aspx 文件中是否有任何代码?如果是这样,那可能就是 IE 不喜欢的地方
    • 我有序列化的测试数据。响应是转储 html,我认为 jQuery 试图解析它并失败。
    【解决方案2】:

    在我看来,对于初学者来说,您需要 json2 库来处理 IE7 的问题。

    至于触发你的函数 - 我看不到实际调用 plotMarkers() 的任何地方,它只是定义的?

    【讨论】:

    • 它是从 $(document).ready 调用的,将 url 放入 statusDiv 的代码正在运行,所以我知道它可以做到这一点。
    • 啊,好吧,没关系。您能否为 Firefox 安装 Firebug,并查看从客户端调用调用 .aspx 页面时是否有任何结果返回,或者是否为 404ing?
    【解决方案3】:

    单击#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") });
    });
    }
    

    【讨论】:

    • 不,绘图发生在页面加载时。我没有包含该代码,因为它有效。我只是把它放在这个函数中,所以它是模块化的。所有的警报和 div 更新都用于调试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多