автозаполнение jquery с ответом json

я получаю ответ в json, но это не будет анализировать ответ json. что я делаю не так? я ничего не нашел в документе http://docs.jquery.com/Plugins/Autocomplete

$("#users-allowed").autocomplete("/people/following.json", {
  width: 320,
  //max: 4,
  highlight: false,
  scroll: true,
  scrollHeight: 300,
  formatItem: function(response, i, max) {
    console.log(response);
    console.log(response['items']);
    console.log(response.items);
    return i + "/" + max + ": \"" + response.status_code + "\" [" + response.status_description + "]";

    //return "<img src='images/" + value + "'/> " + value.split(".")[0];
  },
  formatResult: function(response) {
    //return value.split(".")[0];
    return response.status_description;
  }
});

person Basit    schedule 20.10.2009    source источник


Ответы (3)


$("#users-allowed").autocomplete("/people/following.json", {
  width: 320,
  dataType: 'json',
  highlight: false,
  scroll: true,
  scrollHeight: 300,
  parse: function(data) {
    var array = new Array();
    for(var i=0;i<data.items.length;i++) {
      array[array.length] = { data: data.items[i], value: data.items[i], result: data.items[i].username };
    }
    return array;
  },
  formatItem: function(row) {               
    var name = '';
    if (row.first_name && row.last_name)
      name = '('+row.first_name+', '+row.last_name+')';
    else if (row.first_name)
      name = '('+row.first_name+')';
    else if (row.last_name)
      name = '('+row.last_name+')';

    return row.username+' '+name;
  }
});

проверьте тип данных и параметр разбора.

person Basit    schedule 20.10.2009
comment
Привет, basit, у меня та же проблема, что ты сделал, потому что я получаю data.split не является функцией - person Satchel; 25.02.2010
comment
Я пытался следовать этому ответу, и он не работает. аргумент функции formatItem не определен. - person James Lin; 08.07.2010
comment
если вы хотите автоматически перенаправить на страницу после выбора, используйте этот код return row.username+''+name; } }).result(function(event, selected) { location.href = selected.url_param_in_json_or_make_one; }); - person jhanifen; 24.11.2010
comment
Также проверьте, что ваш JSON действителен и правильно сформирован, это очевидно, но тоже большая ошибка. - person Question Mark; 29.11.2010
comment
как он сказал, убедитесь, что ваш формат json действителен, и все данные в json соответствуют функции, например элементы и т. д., иначе это выдаст ошибку. это работало нормально для меня. - person Basit; 04.04.2011
comment
@Basit Mine загружает данные для первого символа, но когда я ввожу новый символ, он выдает Uncaught TypeError: Object 0 has no method 'toLowerCase'. У вас когда-нибудь была такая проблема раньше? - person Shawn Mclean; 25.07.2011

Я думаю, вам просто нужно добавить опцию dataType, я помню, что готовил, что вы можете использовать любую из опций $.ajax в автозаполнении:

$("#users-allowed").autocomplete("/people/following.json", {
    dataType: "json",
    ...
person karim79    schedule 20.10.2009
comment
с тем, что я получаю data.split, это не функция jquery/jquery.autocomplete.js Ошибка строки 11 - person Basit; 20.10.2009
comment
Кстати, я нигде не использую эту функцию .. вы можете видеть выше мой код - person Basit; 20.10.2009
comment
@basit - поскольку сейчас вы работаете с объектом, split является функцией типа Array. - person karim79; 20.10.2009

Попробуйте объявить параметры вне области $(document).ready(..)

Ex:

var acCbo = {
        minChars: 1,
        delay:500,
        max: 100,
        width: 400,
        dataType: 'json', // this parameter is currently unused
        extraParams: {
            format: 'json', //pass the required context to the Zend Controller,
            filtro: 'id_procsianv,id_atividade',
            chave: function(){
                return $('#id_procsianv').val()+','+$('#id_atividade').val();
            }
        },
        queryParam: "descricao",
        parse: function(data) {
            if (data['qtde']>0){
                data = data['Cbo'];
                var parsed = [];
                for (var i = 0; i < data.length; i++) {
                    parsed[parsed.length] = {
                        data: data[i],
                        value: data[i].id_cbo,
                        result: $('<textarea/>').html(data[i].no_cbo).val()
                    };
                }
                return parsed;
            }else{
                $('#id_cbo').val('');
                return [];
            }
        },
        formatItem: function(item) {
            return item.no_cbo+ ' (' +item.id_cbo+ ')';
        }
    };

    $(document).ready(function(){

    $('#cbo').autocomplete('/cbos/index',acCbo)
    .result(function(e,data){
        $('#id_cbo').val(data.id_cbo);

    });
});
person Anderson Murakami    schedule 15.07.2011