jQuery(kendo)和.NET Web Service(asmx)以及Json问题..需要帮助
本文关键字:问题 Json 以及 帮助 Service kendo NET Web jQuery asmx | 更新日期: 2023-09-27 18:00:38
首先,它对这个主题做了大量研究,找不到答案或完整的例子。我对jquery没有太多的经验,所以我正在寻找一个简单的示例来说明我正在努力实现的目标。
我想让Web服务(asmx)返回一个json,我可以用它来填充网格、组合框、自动补全等。我使用的是Visual Studio 2008,下面是我得到的,或者我的目标是:
ASMX:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[ScriptService]
public class Services : System.Web.Services.WebService
{
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<Preceptor> SearchPrecetor()
{
List<Preceptor> myPreceptorList = new List<Preceptor>();
for (int i = 0; i < 10; i++)
{
Preceptor myPreceptor = new Preceptor();
myPreceptor.Id = i;
myPreceptor.Name = "Name" + i.ToString();
myPreceptorList.Add(myPreceptor);
}
return myPreceptorList;
}
public class Preceptor {
public int Id {get; set; }
public string Name { get; set; }
}
}
Javascript:
$(document).ready(function() {
$("#acPreceptors").kendoAutoComplete({
minLength: 3,
dataTextField: "Name",
dataSource: {
type: "json",
serverFiltering: true,
serverPaging: true,
pageSize: 20,
transport: {
contentType: "application/json; charset=utf-8",
type: "POST",
read: "../Services/Services.asmx/SearchPrecetor"
}
}
});
});
这是错误我得到的:
Uncaught TypeError: Object #<Document> has no method 'slice'
我的猜测是,整个过程仍然有问题,json没有正确地到达客户端。再说一次,我对jquery没有太多的经验,如果能提供一个简单而完整的例子来说明如何做到这一点,我将不胜感激。
任何想法,链接,代码,修复将不胜感激!感谢
当我使用.asmx服务时,我必须在数据源中添加以下内容。。。
schema: {
data: "d", // ASMX services return JSON in the following format { "d": <result> }. Specify how to get the result.
model: ....etc...
},
例如,我的基本数据源是…
var sharableDataSource = new kendo.data.DataSource({
schema: {
data: "d", // ASMX services return JSON in the following format { "d": <result> }. Specify how to get the result.
model: { // define the model of the data source. Required for validation and property types.
id: "Id",
fields: {
Id: { editable: false, nullable: true },
... and so forth .....
}
}
},
batch: true,
transport: {
read: {
url: "sMyService.asmx/getList", //specify the URL which data should return the records.
contentType: "application/json; charset=utf-8", // tells the web service to serialize JSON
type: "POST", //use HTTP POST request as the default GET is not allowed for ASMX
data: { Id: 5 }
},
parameterMap: function (data, operation) {
if (operation != "read") {
// web service method parameters need to be send as JSON.
return JSON.stringify({ myItems: data.models })
} else {
return JSON.stringify(data);
}
}
}
});
我的web服务功能。。。(创建移除项目阵列的代码)
<WebMethod> _
<ScriptMethod(ResponseFormat:=ResponseFormat.Json, UseHttpGet:=False)> _
Public Function getList(ByVal Id As Integer) As cDetail()
Dim items As New List(Of cDetail)
Return items.ToArray()
End Function
在数据源的传输中使用此。
transport: {
read: {
contentType: "application/json; charset=utf-8",
type: "POST",
url: "../Services/Services.asmx/SearchPrecetor"
}
}
请检查文档http://docs.kendoui.com/documentation/getting-started/web/autocomplete/overview#using-要绑定到jsonp的kendouiweb数据源,一切都在那里。
我认为应该是:
$(document).ready(function() {
$("#acPreceptors").kendoAutoComplete({
minLength: 3,
dataTextField: "Name",
dataSource: {
type: "json",
serverFiltering: true,
serverPaging: true,
pageSize: 20,
transport: {
read: {
contentType: "application/json; charset=utf-8",
type: "POST",
url: "../Services/Services.asmx/SearchPrecetor"
}
}
}
});
});
注意读取对象。
感谢您的回复。一开始我确实把语法搞砸了。
之后出现了许多其他问题,以下是我为每个问题找到的解决方案:
(我希望这对未来的其他人有用)
为了让ASMX Web服务返回JSON
Web服务方法必须具有:
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
请求必须包含:
contentType: "application/json; charset=utf-8"
type: "POST"
为了将参数正确传递给请求
parameterMap: function() {
return kendo.stringify({ ParamName: $('#myTextBox').val() });
}
出于某种原因,Web服务将在"d"对象内返回请求。记住这一点。
始终使用探查器来监视您的请求和响应。
我希望这能有所帮助。