【问题标题】:jQuery UI Icons appearing in jQuery Autocomplete resultsjQuery 自动完成结果中出现的 jQuery UI 图标
【发布时间】:2010-11-17 07:34:03
【问题描述】:

我正在使用jQuery Autocomplete Plugin(由 jQuery 成名的 Jörn Zaefferer 编写)。

后端代码:

public JsonResult GetCompanyNames()
    {
        return Json(Model.CompanyNames); //returns valid JSon
    }

相关JS代码:

$('#CompanyName').autocomplete(['Suzuki', 'Honda', 'blah']); //This works fine
$('#CompanyName').autocomplete('/Account/Login/GetCompanyNames'); //This renders icons!

将 Javascript 数组作为 url/data 参数传递时,它可以正常工作。

但是当我将Area/Controller/Action 作为参数传递时,它会在相应的文本框中显示 jQuery 的 ui 图标(嗯?)!!?

是的,我希望我可以附上屏幕截图。相信我,我还是不敢相信自己的眼睛。

在调试时,我已验证我的方法返回有效的JsonResult 数据。我正在使用:ASP.NET MVC3、jQuery 1.4.2。我检查并发现 Chrome 6.0、IE8 和 Firefox 3.5 上的行为相同

更新:图标甚至在自动完成请求从服务器返回之前出现。

【问题讨论】:

  • 如果您已经在使用 jQuery UI,为什么还要使用 bassistance.de 插件?该插件已被弃用,取而代之的是 jQuery UI 版本。
  • 我升级到了 jQuery UI 的自动完成。(虽然不是没有困难,但值得)。

标签: javascript jquery asp.net-mvc jquery-plugins autocomplete


【解决方案1】:

确保允许 GET 请求:

public ActionResult GetCompanyNames()
{
    return Json(Model.CompanyNames, JsonRequestBehavior.AllowGet);
}

另一个提示:使用FireBug 查看客户端和服务器之间的确切交换内容以及任何可能的错误消息。


更新:

问题在于您需要使用 parseformatItem 函数手动解析 JSON,因为插件需要以特殊方式格式化数据:

$('#CompanyName').autocomplete('/Account/Login/GetCompanyNames', {
    dataType: 'json',
    formatItem: function (data, i, max, value, term) {
        return value;
    },
    parse: function (data) {
        return $.map(data, function (item) {
            return { data: item, value: item, result: item };
        });
    }
});

【讨论】:

  • @Darin:我确实尝试了上述方法,但仍然无法正常工作。控制台向我显示此错误消息:“Uncaught TypeError: Object has no method 'split'。”
  • FireBug 说什么?请求是否发送到服务器?服务器响应什么?您是从控制器操作返回完全相同的 JSON 数组:['Suzuki', 'Honda', 'blah'],还是一些复杂的对象?您的控制器操作应返回如下:return Json(new[] { "Suzuki", "Honda", "blah" }, JsonRequestBehavior.AllowGet);。你看:一个字符串数组。 Model.CompanyNamesstring[] 吗?
  • 是的,请求被发送到服务器。服务器响应如预期。 IE。 Model.CompanyNames 是一个字符串 []。 Firebug 的控制台没有给我任何警告/错误。响应头包含 Content-Type : application/json; charset=utf-8 状态:200 OK
  • 尝试指定 JSON:$('#CompanyName').autocomplete('/Account/Login/GetCompanyNames', { dataType: 'json' });
  • @conqenator,您需要将parse 函数与formatItem 一起使用。请查看我的更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-28
  • 2015-01-28
相关资源
最近更新 更多