解决mvc autocomplete访问webservice 返回xml格式的问题
一、用autocomplete插件去访问webservice时,接收不到json数据,因为在本地测试是可以的,
但部署到服务器上就获取不到返回的json数据,原以为是要在服务器上做什么设置,其实只要修改一下autocomplete.js就行了。其他的就不说了,直接上代码。
1.js部分
$('#txtSearchKeyWords').autocomplete("/Ajax/WebService.asmx/GetCacheCommunity", { minChars: 1, httpMethod: "POST", max: 100, scroll: true, matchContains: false, dataType: "json",//返回的数据格式 contentType: "application/json;charset=utf-8",//提交的数据格式 parse: function (data) { //重写格式化得到的json集合因为原有方法无法解析通过webservice回调的值 var rows = new Array(); var datas = eval("(" + data.d+")"); ; for (var i = 0; i < datas.length; i++) { rows[i] = { data: datas[i], value: datas[i].key, result: datas[i].key }; } return rows; }, formatItem: function (row, i, n) { return row.key; } } );
2.webservice中的代码
[WebMethod()] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public string GetCacheCommunity(string q, int limit) { StringBuilder sb = new StringBuilder(); if (SZHomeDLL.StringHelper.IsIncludeSqlInjection(q)) { return "{}"; } DataTable dt = Common.Caches.CacheCommunity; DataRow[] rows = dt.Select("pinyin like \'%" + q + "%\'"); for (int i = 0; i <= (rows.Length > 11 ? 11 : rows.Length - 1); i++) { sb.Append("{\"key\":\"" + rows[i]["projectname"] + "\"},"); } if (sb.Length > 0) { sb.Remove(sb.Length - 1, 1); } // Context.Response.Write("[" + sb.ToString() + "]"); return "["+sb.ToString()+"]"; }
注意从官网下载的autocomplete.js要修改一下,修改后的文件路径
注意修改的地方
/*这里使用json2.js里的JSON.stringify()方法,把json对象转换成字符串 如果不进行转换提交会报错*/ data: JSON.stringify($.extend({ q: lastWord(term), limit: options.max }, extraParams)),
多加了
JSON.stringify()方法。
其他可以参考一下这篇文章

浙公网安备 33010602011771号