与webservice返回的JSON字符串混淆

时间:2014-02-20 00:47:03

标签: ajax json kendo-ui

我刚刚开始使用Kendo-UI,Web服务和JSON。首先,我创建并部署了我的asp.net Web服务(我不打算使用WCF)。我检查了ASMX文件,该文件返回了以下结果:

[
{"Id":"4e7dc3f8-db50-4978-be10-09808a6216a7","CompanyName":"company1"},
{"Id":"d156a2cd-1768-439e-98eb-134366a6c9be","CompanyName":"company2"},
{"Id":"7acba8b5-b773-4071-bfd5-2537d7d20e1e","CompanyName":"company3"}
]

我使用基于Web的JSON验证器检查了上述结果(复制/粘贴,而不是通过调用Web服务),这导致了成功的解析。到目前为止,一切似乎都没问题。

下一步是使用结果填充kendoDropDownList:

var dataSource = new kendo.data.DataSource({
    transport: {
        read: {                    
            url: "/scws/qpm.asmx/GetSuppliers",
            dataType: "json"
        }
    }
});

$("#supplier").kendoDropDownList({
    dataSource: dataSource,
    dataValueField: "Id",
    dataTextField: "CompanyName"            
});

嗯,它不起作用。我尝试了几种变体,直到我放弃并尝试以不同的方式调用我的Web服务,仅用于测试:

$.ajax({
        url: "/scws/qpm.asmx/GetSuppliers",
        type: "POST",
        contentType: "application/json; charset=utf-8",            
        dataType: "json",
        cache: false,
        success: function (msg) {
            // data is returned                                                      

        },
        error: function (xhr, status, error) {
            // handle error
            alert(status);
            alert(xhr.status);                
            alert(xhr.responseText);
            alert(error);
        }
    });

好吧,我得到了一个解析器错误(200)。响应文本与直接测试ASMX文件时的响应文本不同。响应文本似乎更长:

[
    {"Id":"4e7dc3f8-db50-4978-be10-09808a6216a7","CompanyName":"company1"},
    {"Id":"d156a2cd-1768-439e-98eb-134366a6c9be","CompanyName":"company2"},
    {"Id":"7acba8b5-b773-4071-bfd5-2537d7d20e1e","CompanyName":"company3"}
] 
{"d":null}

我确信我做了一些基本的事情......我很感激你的帮助。

2 个答案:

答案 0 :(得分:1)

不知道你的asmx方法是什么样的,很难准确说出来。这是一个快速的样本asmx我在一起。我确实继续将我的方法切换为使用GET而不是POST。

web服务

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class Service : System.Web.Services.WebService
{

    [WebMethod]
    [ScriptMethod (UseHttpGet = true, ResponseFormat = ResponseFormat.Json)]
    public List<Person> GetPeople()
    {
        List<Person> people = new List<Person>();
        people.Add(new Person() { Age = 21, Name = "Fred" });
        people.Add(new Person() { Age = 31, Name = "Ted" });
        people.Add(new Person() { Age = 41, Name = "Ned" });
        people.Add(new Person() { Age = 51, Name = "Red" });


        return people;
    }
}

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

返回了这个json

{"d":[{"__type":"ASMXTest.Person","Name":"Fred","Age":21},{"__type":"ASMXTest.Person","Name":"Ted","Age":31},{"__type":"ASMXTest.Person","Name":"Ned","Age":41},{"__type":"ASMXTest.Person","Name":"Red","Age":51}]}

这是我的kendo dataSource来访问该webmethod

var dataSource = new kendo.data.DataSource({
            transport: {
                read: {
                    url: "Service.asmx/GetPeople",
                    dataType: "json",
                    contentType: "application/json; charset=utf-8"
                }
            },
            schema: {
                data: function (response) {
                    return response.d;
                }
            }
        });

        $("#grid").kendoGrid({
            dataSource: dataSource,
            columns: [
                { field: 'Name' },
                { field: 'Age' }
            ]
        });

如果这不能帮助您,请发布您的asmx webmethod。

答案 1 :(得分:0)

感谢您的帮助和时间。我担心问题出在我的网络服务上。现在很好。