【问题标题】:Return complex object from an AJAX call从 AJAX 调用返回复杂对象
【发布时间】:2009-12-26 07:22:36
【问题描述】:

使用环境:ASP.NET、jQuery

我有以下 AJAX 调用:

var tempVar = JSON.stringify({plotID:currentId});            

$.ajax({
       type: "POST",
       url: "testPage.aspx/getPlotConfig",
       data: tempVar,
       contentType: "application/json; charset=utf-8",
       dataType: "json",
       success: function(msg) {
       $('#xDimLbl').text(msg.xDim);
       $('#bDimLbl').text(msg.bDim);
       } 
});

后面的代码有方法getPlotConfig(string plotID)定义为

public static string getPlotConfig(string plotID)
{
      string x = "T1";
      string b = "T2";
      return Json(new { xDim= x, bDim= b });
}

问题:

  1. 当我进行构建时,我收到错误:当前上下文中不存在名称 'Json' 哪个命名空间有问题?
  2. 连同两个字符串 x 和 b,我想返回一个哈希表,其键是字符串,值是逗号分隔的字符串列表。我该怎么做以及如何在客户端访问每个键值对?

干杯

【问题讨论】:

    标签: asp.net jquery ajax json


    【解决方案1】:

    这可能是指 ASP.NET MVC 控制器中使用的Json 方法。由于您的 getPlotConfig 函数是静态的,因此您不能使用此方法。你可以看看PageMethods。这是一个例子:

    [WebMethod]  
    [ScriptMethod]
    public static object getPlotConfig(string plotID)  
    {  
        var hash = new Dictionary<string, string>() 
        {
            { "key1", "valueA,valueB" },
            { "key2", "valueC,valueD" },
        };
        var x = "T1";
        var b = "T2";
        return new { xDim = x, bDim = b, hash = hash };
    }
    

    在 javascript 中:

    success: function(msg) {
       $('#xDimLbl').text(msg.d.xDim);
       $('#bDimLbl').text(msg.d.bDim);
       for(var key in msg.d.hash) {
           var value = msg.d.hash[key];
           // Do something with key and value...
        }
    } 
    

    【讨论】:

    • 谢谢达林。使用序列化器后,构建工作正常。但是,我无法读取 jQuery 中的值,即 $('#xDimLbl').text(msg.xDim);和 $('#bDimLbl').text(msg.bDim);。在解释它的元素之前我需要反序列化 msg 吗?
    • 您收到一些错误信息吗?您能否发布来自服务器的确切 JSON 响应?
    • 您是否通过在您的 aspx 页面中包含脚本管理器来启用页面方法:&lt;asp:ScriptManager ID="scm" runat="server" EnablePageMethods="true" /&gt;
    • 是的,我在表单标签中包含了脚本管理器,我没有看到任何明确的错误。我使用的是 IE8,并没有真正使用它的开发者工具来获取 JSON 响应。我将尝试以某种方式获取 JSON 响应。
    • 我做了一个警报(msg.xDim);和警报(msg.bDim);内部成功:function(msg) {...} 并且警报显示“未定义”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 2012-01-28
    • 1970-01-01
    相关资源
    最近更新 更多