Автозаполнение jQuery не работает с данными Json - PullRequest
2 голосов
/ 28 июля 2010

Существует целый ряд учебников, объясняющих, как это сделать, например, здесь и здесь .

Выглядит очень просто, да?Тем не менее, мне все же каким-то образом удалось потратить полдня на это, не получая ничего работающего.

Например: следующее работает абсолютно нормально

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 никогда не срабатывает, т.е. я предполагаю, что загрузка данных каким-то образом увеличивается или думает, что данных нет.Есть идеи?Спасибо.

ps это плагин Jorn Zaefferer здесь .

1 Ответ

3 голосов
/ 28 июля 2010

Убедитесь, что вы возвращаете массив и разрешаете 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-запросы отправляются и почему они выполняются успешно или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...