jQuery自动完成不使用Json数据

时间:2010-07-28 11:00:43

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

有很多教程解释如何执行此操作,例如herehere

看起来很简单吧?然而,我仍然以某种方式浪费了半天时间而没有任何工作。

例如:以下作品绝对正常

public ActionResult FindStuff(string q)
{
    return Content("test");
}

$('#MyTextBox').autocomplete("MyController/FindStuff", {
    parse: function(data) {
        alert('parsing');
    }
});

如果我将其更改为以下内容,则绝对不会发生任何事情。

public JsonResult FindStuff(string q)
{
    return Json(new { name = "test" });
}

$('#MyTextBox').autocomplete("MyController/FindStuff", {
    dataType: 'json', // I've also tried with this line commented out
    parse: function(data) {
        alert('parsing');
    }
});

所以看起来parse调用永远不会被命中,即我假设数据负载以某种方式爆炸或者认为没有数据。有任何想法吗?感谢。

P.S。这是Jorn Zaefferer插件here

1 个答案:

答案 0 :(得分:3)

确保您返回一个数组并允许GET请求(如果您使用的是ASP.NET MVC 2.0):

public ActionResult FindStuff(string q)
{
    return Json(new[] { new { name = "test" } }, JsonRequestBehavior.AllowGet);
}

然后按照示例:

$('#MyTextBox').autocomplete("MyController/FindStuff", {
    dataType: 'json',
    parse: function (data) {
        var rows = new Array();
        for (var i = 0; i < data.length; i++) {
            rows[i] = { data: data[i], value: data[i].name };
        }
        return rows;
    },
    formatItem: function (row, i, n) {
        return row.name;
    }
});

很好地工作。

备注:FireBug可以帮助您快速诊断问题,因为它可以准确地向您显示正在发送的AJAX请求以及它们成功或失败的原因。