【问题标题】:Passing string array from ASP.NET to JavaScript将字符串数组从 ASP.NET 传递到 JavaScript
【发布时间】:2013-04-17 23:50:13
【问题描述】:

我试图从 JavaScript 调用服务器端,然后将一个字符串数组传回 JavaScript,但遇到了问题。

// Call the server-side to get the data.
$.ajax({"url" : "MyWebpage.aspx/GetData",
        "type" : "post",
        "data" : {"IdData" : IdData},
        "dataType" : "json",
        "success": function (data)
        {
            // Get the data.
            var responseArray = JSON.parse(data.response);

            // Extract the header and body components.
            var strHeader = responseArray[0];
            var strBody = responseArray[1];

            // Set the data on the form.
            document.getElementById("divHeader").innerHTML = strHeader;
            document.getElementById("divBody").innerHTML = strBody;
        }
});

在 ASP.Net 服务器端,我有:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static object GetTip(String IdTip)
{
    int iIdTip = -1;
    String[] MyData = new String[2];


    // Formulate the respnse.
    MyData[0] = "My header";
    MyData[1] = "My body";

    // Create a JSON object to create the response in the format needed.
    JavaScriptSerializer oJss = new JavaScriptSerializer();

    // Create the JSON response.
    String strResponse = oJss.Serialize(MyData);

    return strResponse;
}

我可能把事情搞混了,因为我还是 JSON 新手。

更新错误代码:

Exception was thrown at line 2, column 10807 in     http://localhost:49928/Scripts/js/jquery-1.7.2.min.js

0x800a03f6 - JavaScript 运行时错误:无效字符

堆栈跟踪: 解析 JSON[jquery-1.7.2.min.js] 第 2 行

我的问题是什么?

【问题讨论】:

  • 您遇到的错误是什么?
  • 在问题中查看我的编辑。
  • 为什么要扣分?
  • 看起来对 JSON.parse 的调用对输入数据的格式不满意。 data.response 的值是多少?
  • @SarahWeinberger 不知道谁对您投了反对票,但请尝试在您的问题中提供尽可能多的信息,否则您最终会遭到反对:)

标签: javascript asp.net ajax json


【解决方案1】:

我将您的 ajax 调用脚本修改为:

// Call the server-side to get the data.
$.ajax({
    url: "WebForm4.aspx/GetTip",
    type: "post",
    data: JSON.stringify({ IdTip: "0" }),
    dataType: "json",
    contentType: 'application/json',
    success: function (data) {
        // Get the data.
        var responseArray = JSON.parse(data.d);

        // Extract the header and body components.
        var strHeader = responseArray[0];
        var strBody = responseArray[1];

        // Set the data on the form.
        document.getElementById("divHeader").innerHTML = strHeader;
        document.getElementById("divBody").innerHTML = strBody;
    }
});

请注意,我添加了contentType: 'application/json'并更改了

var responseArray = JSON.parse(data.response);

var responseArray = JSON.parse(data.d);

【讨论】:

  • Ajakblackgoat 的回应是一个变化的答案。我不得不将 'IdTip: "0"' 更改为 'IdTip: IdTip',因为 JavaScript 变量 IdTip 具有主键。有趣的是,第一个参数不需要引号来指示参数。 (续第二条评论)
  • 一开始我并没有意识到,但我从未在 C# 代码中遇到过断点。老实说,我认为执行的代码只是 Visual Studio 令人讨厌。成功代码中的 JavaScript 也是如此。今天早上进一步调试发现 b 变量是 JSON 试图解析的我的 HTML 文档代码。每次从 JavaScript 过程返回后处理 $.ajax 时,我都会收到一次崩溃,因此没有堆栈跟踪。 Ajakblackgoat 解决了这个问题,并不是说我理解他的变化的原因。两者都是需要的。谢谢!
  • JSON.stringify 将负责将参数名称转换为字符串。并且不要忘记contentType 必须设置为'application/json'
【解决方案2】:

这纯粹是出于猜测。但看看这是否是你得到的: - 在您的 Ajax 调用中,您的数据类型是 json 并查看您返回 json 字符串的方法。所以你不需要做 JSON.parse(data.response)。相反,只需看看以下内容是否适合您。我也没有在您的 Json 中看到 response 对象,而它只是一个数组。所以它一定是在尝试解析undefined

 var strHeader = data[0];
 var strBody = data[1];

【讨论】:

  • 实现ajakblackgoat的代码后,开始收到成功信息。我想我应该怀疑,如果我没有收到成功消息或遇到断点,那么我真的没有到达那里,问题出在其他地方。尽管如此,我还是决定看看 data[0] 和 data[1] 返回什么。他们返回“未定义”。我放置了警报语句来检查并命中断点。两者都显示“未定义”。我放置了 alert("data[0]"+data[0]) 语句。当我使用 ajakblackgoat 的解析数据做同样的事情时,我得到了正确的返回值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-15
  • 2017-05-07
  • 1970-01-01
  • 2016-11-14
  • 2015-10-10
  • 2014-02-22
相关资源
最近更新 更多