我在我的网站上写了以下webservice asmx文件:
[WebService(Namespace = "http://eumcore.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class jsonTest : System.Web.Services.WebService {
public jsonTest () {
}
[WebMethod(Description = "Gets the names matching part of a title.")]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void getName() {
List<nameEntry> nameList = new List<nameEntry>();
nameList.Add(new nameEntry() {id="1", name="John"});
nameList.Add(new nameEntry() { id = "3", name = "Alex" });
this.Context.Response.ContentType = "application/json; charset=utf-8";
JavaScriptSerializer js = new JavaScriptSerializer();
string strJSON = js.Serialize(nameList);
this.Context.Response.Write(strJSON);
}
}
作为一个开始,我希望每次都返回相同的数组,当我直接调用它时,webservice的结果是:
[{"id":"1","name":"John"},{"id":"3","name":"Alex"}]
哪个是正确的答案,当我用它作为本地输入时结果很好但是当我在tokeninput的输入法中调用webservice时(我给函数分配了一条错误信息)我得到以下错误: 200 parsererror undefined“
任何人都可以帮我搞清楚吗?
由于
多伦
编辑:在使用jquery代码后,我设法接收数据,但我收到以下错误:200
parsererror
[{ “ID”: “1”, “姓名”: “AAA”},{ “ID”: “3”, “名称”: “AAA”}] { “d”:空}
我不明白的是什么是d,为什么它是空的?
答案 0 :(得分:1)
你shouldn't be manually serializing that JSON并写出来。如果您允许,ASP.NET将自动为您执行此操作:
[WebMethod(Description = "Gets the names matching part of a title.")]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public List<nameEntry> getNames() {
List<nameEntry> nameList = new List<nameEntry>();
nameList.Add(new nameEntry() {id="1", name="John"});
nameList.Add(new nameEntry() { id = "3", name = "Alex" });
return nameList;
}
问题是you need to call the service a particular way with jQuery以获取JSON响应而不是XML,特别是内容类型application/json
的POST请求。
答案 1 :(得分:0)
为了安全起见,asp.net是否将返回数据包装在对象中?例如,你没有得到你认为的数组,而是在[“d”]属性下包含你的数组的对象{}。
我认为插件需要一个对象数组,因此您可能无法将url传递给tokeninput初始化程序。相反,在JSON请求的回调中,将数据输出并输入正确的形式(对象数组),然后使用该数组初始化tokeninput插件。