Ошибка при передаче объекта JSON из WebMethod (C#) - PullRequest
0 голосов
/ 01 мая 2020

У меня есть C# WebMethod, который получает некоторые данные из моей базы данных SQL и затем преобразует их в JSON строку.

Вот WebMethod

    [WebMethod]
    public object getCustomers() {

        string constr = ConfigurationManager.ConnectionStrings["Indigo2.Properties.Settings.Constr"].ConnectionString;
        using (SqlConnection con = new SqlConnection(constr))
        {
            using (SqlCommand cmd = new SqlCommand("SELECT DISTINCT custid, cust_name FROM [dbo].[customers] WHERE archive = 'No'"))

            {
                cmd.Connection = con;
                List<Customers> customers = new List<Customers>();
                con.Open();
                using (SqlDataReader sdr = cmd.ExecuteReader())
                {
                    while (sdr.Read())
                    {
                        customers.Add(new Customers
                        {
                            custid = sdr["custid"].ToString(),
                            cust_name = sdr["cust_name"].ToString(),

                    });
                    }
                    con.Close();

                    String result = JsonConvert.SerializeObject(customers);
                    this.Context.Response.ContentType = "application/json; charset=utf-8";
                    this.Context.Response.Write(result);

                    return result;
                }
            }
        } 
    }

Я пытаюсь передать эти данные на стороне клиента, используя JavaScript.

Вот мой JS

    function buildSelect(response) {

        alert(JSON.stringify(response));

        var $tulem = $("<select><option value=''>All</option></select>");

        $.each(JSON.parse(response).rows, function (i, item) {
            $("<option></option>", { value: item.custid })
                .text(item.custid)
                .appendTo($tulem);
        });

        return $tulem;
    }

JSON .Parse завершается ошибкой со следующими ошибками

XML Ошибка синтаксического анализа: синтаксическая ошибка Расположение: https://localhost: 44338 / WebService1.asmx / getCustomers Строка № 1, столбец 1: getCustomers: 1: 1 Синтаксическая ошибка: JSON. parse: неожиданный непробельный символ после JSON данных в строке 1 столбца 722 JSON data

Если я верну консоль JSON, она будет выглядеть следующим образом.

"[{\"custid\":\"ACC001\",\"cust_name\":\"Accenda Limited\"},{\"custid\":\"ANI001\",\"cust_name\":\"Animal Friends\"},{\"custid\":\"APP001\",\"cust_name\":\"Appello\"},{\"custid\":\"ATL001\",\"cust_name\":\"Atlas Contract Furniture\"},{\"custid\":\"BNS001\",\"cust_name\":\"BNS Ltd\"},{\"custid\":\"HAR001\",\"cust_name\":\"Harrow Health\"},{\"custid\":\"IND001\",\"cust_name\":\"Indigo Integrated Solutions\"},{\"custid\":\"MER001\",\"cust_name\":\"Merton Health Limited\"},{\"custid\":\"POL001\",\"cust_name\":\"Polyhose (UK) Ltd\"},{\"custid\":\"PUR001\",\"cust_name\":\"Purbeck School\"},{\"custid\":\"QUE001\",\"cust_name\":\"Queen Elizabeth's School\"},{\"custid\":\"SER001\",\"cust_name\":\"Serbus Limited\"},{\"custid\":\"STS001\",\"cust_name\":\"STS Defence\"},{\"custid\":\"WIM001\",\"cust_name\":\"Wimborne Academy Trust\"}]<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<anyType xmlns:q1=\"http://www.w3.org/2001/XMLSchema\" d1p1:type=\"q1:string\" xmlns:d1p1=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns=\"http://tempuri.org/\">[{\"custid\":\"ACC001\",\"cust_name\":\"Accenda Limited\"},{\"custid\":\"ANI001\",\"cust_name\":\"Animal Friends\"},{\"custid\":\"APP001\",\"cust_name\":\"Appello\"},{\"custid\":\"ATL001\",\"cust_name\":\"Atlas Contract Furniture\"},{\"custid\":\"BNS001\",\"cust_name\":\"BNS Ltd\"},{\"custid\":\"HAR001\",\"cust_name\":\"Harrow Health\"},{\"custid\":\"IND001\",\"cust_name\":\"Indigo Integrated Solutions\"},{\"custid\":\"MER001\",\"cust_name\":\"Merton Health Limited\"},{\"custid\":\"POL001\",\"cust_name\":\"Polyhose (UK) Ltd\"},{\"custid\":\"PUR001\",\"cust_name\":\"Purbeck School\"},{\"custid\":\"QUE001\",\"cust_name\":\"Queen Elizabeth's School\"},{\"custid\":\"SER001\",\"cust_name\":\"Serbus Limited\"},{\"custid\":\"STS001\",\"cust_name\":\"STS Defence\"},{\"custid\":\"WIM001\",\"cust_name\":\"Wimborne Academy Trust\"}]</anyType>"

Что я делаю не так, что я могу сделать, чтобы изменить это в стандартную чистую JSON строку?

ОБНОВЛЕНО

Это то место, откуда вызывается WebMethod, его dataURL, для поля cust_name, определенного в опциях редактирования JQGRID.

        jQuery("#jqquotes").jqGrid({
            url: '../We

bService1.asmx/getDataQuotes',
                datatype: "json",
                mtype: 'POST',
                ajaxGridOptions: { contentType: "application/json" },
                serializeGridData: function (postData) {
                    if (postData.searchField === undefined) postData.searchField = null;
                    if (postData.searchString === undefined) postData.searchString = null;
                    if (postData.searchOper === undefined) postData.searchOper = null;
                    if (postData.filters === undefined) postData.filters = null;
                    return JSON.stringify(postData);
                },
                jsonReader: {
                    root: function (obj) {
                        return typeof obj.d.rows === "string" ? $.parseJSON(obj.d.rows) : obj.d.rows;
                    },
                    page: function (obj) { return obj.d.page; },
                    total: function (obj) { return obj.d.total; },
                    records: function (obj) { return obj.d.records; },
                    repeatitems: false
                },
                loadComplete: function () {
                    $('#jqquoteitems').trigger('reloadGrid');

                },
                loadError: function (jqXHR, textStatus, errorThrown) {
                    alert('HTTP status code: ' + jqXHR.status + '\n' +
                        'textStatus: ' + textStatus + '\n' +
                        'errorThrown: ' + errorThrown);
                    alert('HTTP message body (jqXHR.responseText): ' + '\n' + jqXHR.responseText);
                },
                onSelectRow: function () {
                    showDetailsGrid();
                },
                height: 'auto',
                //autowidth: true,
                rowNum: 5,
                rowList: [5, 10, 15],
                colNames: ['Doc ID', 'Quote #', 'Summary', 'Date', 'Customer', 'Contact', 'custid'],
                colModel: [
                    { name: 'docid', key: true, index: 'docid', width: 55, editable: true },
                    { name: 'quote_number', index: 'quote_number', width: 45, editable: true },
                    { name: 'summary', index: 'summary', width: 160, editable: true, edittype: 'textarea' },
                    {
                        name: 'quote_date', formatter: 'date', datefmt: "d-m-Y", editoptions: { dataInit: initDateEdit },
                        formatoptions: { srcformat: "d/m/Y H:i:s", newformat: "d-m-Y" }, index: 'quote_date', width: 60, editable: true
                    },
                    {
                        name: 'cust_name', index: 'cust_name', width: 140, align: "left", editable: true, edittype: "select",
                        editoptions: {
                            dataUrl: '/WebService1.asmx/getCustomers',
                            buildSelect: buildSelect
                        }
                    },

...

1 Ответ

0 голосов
/ 02 мая 2020

Это сбой, потому что в конце вашей строки JSON есть "<anyType>", который не разбирается для JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...