【问题标题】:javascript, array of string as JSONjavascript,字符串数组为 JSON
【发布时间】:2015-11-20 13:40:18
【问题描述】:

我在传递两个字符串数组作为 JSON 格式的参数以通过 jQuery 的“POST”调用 ASMX Web 服务方法时遇到问题。

我的网络方法是:

[ScriptMethod(ResponseFormat=ResponseFormat.Json)]
        public List<string> CreateCollection(string[] names, string[] lastnames)
        {
            this.collection = new List<string>();
            for (int i = 0; i < names.Length; i++)
            {
                this.collection.Add(names[i] + " " + lastnames[i]);
            }
            return this.collection;
        }

现在,js:

function CreateArray() {
            var dataS = GetJSONData(); //data in JSON format (I believe)
            $.ajax({
                type: "POST",
                url: "http://localhost:45250/ServiceJava.asmx/CreateCollection",
                data: dataS,
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data) {
                    //something
                }
            })
        }

GetJSONData() 是我从表中的列创建两个数组的辅助方法。代码如下:

function GetJSONData() {
            //take names
            var firstnames = $('#data_table td:nth-child(1)').map(function () {
                return $(this).text();
            }).get(); //["One","Two","Three"]

            //take surnames
            var surnames = $('#data_table td:nth-child(2)').map(function () {
                return $(this).text();
            }).get(); //["Surname1","Surname2","Surname3"]

            //create JSON data
            var dataToSend = {
                names: JSON.stringify(firstnames),
                lastnames: JSON.stringify(surnames)
            };
            return dataToSend;
        }

现在,当我尝试通过单击调用 CreateArray() 的按钮来执行代码时,我得到了错误:

ExceptionType:“System.ArgumentException”消息:“首先不正确 JSON 元素:名称。”

我不知道,为什么它不正确?我已经准备了很多关于它的帖子,但我不知道为什么它不起作用,dataS 有什么问题?

编辑: 这是来自调试器的dataToSend

var dataToSend = {
                    names: firstnames,
                    lastnames: surnames,
                };

正如我建议的那样。

EDIT2: @Vijay Dev 提到的 ""'' 有一些问题,因为当我尝试将 data 传递为 data: "{names:['Jan','Arek'],lastnames:['Karol','Basia']}", 时,它起作用了。

所以,stringify() 不是这里的最佳选择,还有其他方法可以帮助我快速完成吗?

【问题讨论】:

  • 您能分享您的 Json 对象以查看您要发布的 Json 结构吗?
  • 我到底应该分享什么?我写过,它是“dataToSend”。我怎样才能得到它的详细信息?
  • 我指的是dataS 值。
  • @Oluwafemi 我刚刚更新了帖子,请看一下。

标签: javascript c# jquery json post


【解决方案1】:

尝试这样发送:

function CreateArray() {
        var dataS = GetJSONData(); //data in JSON format (I believe)
        $.ajax({
            type: "POST",
            url: "http://localhost:45250/ServiceJava.asmx/CreateCollection",
            data: {names: dataS.firstnames,lastnames: dataS.surnames} ,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                //something
            }
        })
    }

这应该可行..

【讨论】:

  • 我也试过了,结果还是一样,我的意思是同样的错误。
【解决方案2】:

我认为既然您已经是 dataToSend 属性的 JSON.stringifying 值,jQuery 可能会尝试将其作为序列化数据发送。尝试从此处删除 JSON.stringify

//create JSON data
var dataToSend = {
    names    : firstnames,
    lastnames : surnames
};

当设置 dataType: "json" 时,jQuery 会将数据字符串化。

祝你好运,玩得开心!

【讨论】:

  • 感谢您的回答。不幸的是,更改后我得到了确切的错误。
  • 您能否console.log( dataToSend ) 并确保names 属性正在获取有效的数组。另外.text() 也可以返回带有"' 的值,这会弄乱JSON 结构。
  • 我已经编辑了我的帖子,查看来自console.log(dataToSend)的结果。
【解决方案3】:

尽管如此,没有一个答案是正确的,这让我找到了正确的方法来做到这一点。为了让它发挥作用,我进行了以下更改:

//create JSON data
    var dataToSend = JSON.stringify({ "names": firstnames, "lastnames": surnames });

所以这是@Oluwafemi 提出的想法,但他建议制作Users 类。不幸的是,在那之后,该应用程序将无法以它呈现的方式运行。所以我想如果我想传递一个自定义对象,我需要以不同的方式传递它。

编辑: 我还没有尝试过,但我认为如果我想通过@Oluwafemi 建议的这样的自定义对象,我需要编写一个脚本:

var user1 = {
            name: "One",
            lastname:"OneOne"
        }

然后将数据传递为:

data = JSON.stringify({ user: user1 });

对于自定义对象数组,以此类推:

data = JSON.stringify({ user: [user1, user2] });

以后有机会我会检查一下。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 2015-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多