jQuery自动完成json数据

时间:2015-05-26 22:56:00

标签: javascript jquery json asp.net-mvc jquery-ui

我正在从控制器返回字符串数组到ajax调用。试图将这些值设置为文本框。在文本框中它没有填充。但我可以看到成功方法中的数据。

  [HttpGet]
    [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
    public JsonResult GetWorkNamesAutoPoplate(string companyName)
    {
        ...
        var newKeys = companyNameslst.Select(x => new string[] { x }).ToArray();

        var json = JsonConvert.SerializeObject(newKeys);
        return Json(json, JsonRequestBehavior.AllowGet);
    }

JS

 $(document).on('change', '[name="FindCompanyName"]', function () {
     $('[name="FindCompanyName"]').autocomplete({        
        source: function (request, response) {           
            $.ajax({
                url: "GetWorkNamesAutoPoplate",
                type: "GET",
                dataType: "json",
                data: { companyName: $('[name="FindCompanyName"]').val() },
                success: function (data) {
                    alert(JSON.stringify(data));
                    response($.map(data, function(item) {
                        console.log(item);
                        return {
                            value: item
                        }
                    }));    
                }
            });
        },
        messages: {
            noResults: "", results: ""
        }    
    });
 });

alert(JSON.stringify(data));显示如下。 enter image description here

如何在文本框中填充此数据

2 个答案:

答案 0 :(得分:0)

这可能会解决您的问题:

success: function (data) {
                  alert(JSON.stringify(data));
                  if (data != null) {
                    response(data.d);
                   }
                }

此链接也可以帮助您获取一些信息:How to use source: function()... and AJAX in JQuery UI autocomplete

答案 1 :(得分:0)

你的json的返回类型是一个数组数组,我想你应该把它作为一个数组

返回
var newKeys = companyNameslst.ToArray();

此外,您的数据已被序列化两次,

一行,

var json = JsonConvert.SerializeObject(newKeys);

,第二次来自JsonResult动作过滤器

return Json(json, JsonRequestBehavior.AllowGet);

发送json数据,

return Json(newKeys, JsonRequestBehavior.AllowGet);

而不是

var json = JsonConvert.SerializeObject(newKeys);
return Json(json, JsonRequestBehavior.AllowGet);

应该有用。

希望这会有所帮助。