簡體   English   中英

javascript,字符串數組作為 JSON

[英]javascript, array of string as JSON

我在傳遞兩個字符串數組作為 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']}",傳遞時data: "{names:['Jan','Arek'],lastnames:['Karol','Basia']}",它起作用了。

所以, stringify()不是這里的最佳選擇,還有其他方法可以幫助我快速完成嗎?

我認為由於您已經為dataToSend屬性設置了JSON.stringifying值,jQuery 可能會嘗試將其作為序列化數據發送。 嘗試從這里刪除JSON.stringify

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

當設置為dataType: "json"時,jQuery 將對數據進行字符串化。

祝你好運,玩得開心!

嘗試像這樣發送:

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
            }
        })
    }

這應該工作..

盡管如此,沒有一個答案是正確的,它讓我找到了正確的方法來做到這一點。 為了使其正常工作,我進行了以下更改:

//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] });

稍后有機會時,我會檢查一下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM