2009-10-20 12 views
20

Je reçois une réponse dans json, mais cela ne va pas analyser la réponse de JSON. Qu'est-ce que je fais mal? i could'nt trouver quoi que ce soit sur le doc http://docs.jquery.com/Plugins/Autocompletejquery autocomplete avec la réponse json

$("#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; 
    } 
}); 

Répondre

33
$("#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; 
    } 
}); 

Vérifiez les options dataType et parse.

+0

btw c'est la bonne réponse avec l'aide de karim79 – Basit

+0

Salut basit, j'ai le même problème, qu'est-ce que vous avez fait parce que je reçois un data.split n'est pas une fonction – Angela

+0

J'ai essayé de suivre cette réponse et il doesn ne fonctionne pas. l'argument de la fonction formatItem est indéfini. –

6

Je pense que vous avez juste besoin de jeter dans une option dataType, je me souviens que vous pouvez prépare utiliser les options de $.ajax dans le autocomplétion:

$("#users-allowed").autocomplete("/people/following.json", { 
    dataType: "json", 
    ... 
+1

avec qui im ​​se data.split est pas une fonction jquery/jquery.autocomplete.js Ligne 11 Erreur – Basit

+0

BTW Im ne pas utiliser cette fonction n'importe où .. vous pouvez voir ci-dessus mon code – Basit

+0

@basit - parce que maintenant vous travaillez avec un objet, 'split' est une fonction de type' Array'. – karim79

1

Essayez de déclarer les options en dehors du champ d'application de $(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); 

    }); 
}); 
Questions connexes