解决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()方法。

其他可以参考一下这篇文章

posted @ 2015-02-05 16:33  nik2011  阅读(176)  评论(0)    收藏  举报