Domanda

Ho un problema con il pluging jquery-completamento automatico e il mio script Django. Voglio un facile da usare plugin di completamento automatico. E per quello che vedo questo ( http://code.google.com/p/jquery- completamento automatico / ) sembra molto utile e facile. Per la parte di Django io uso questo ( http://code.google.com/p / django-ajax-select / ) ho modificato un po ', perché il mettere fuori sembrava un po' weired a me. Aveva 2 '\ n' per ogni nuova linea, e non vi era alcuna intestazione Content-Length nella risposta. Per prima cosa ho pensato che questo potrebbe essere il problema, perché tutti gli esempi che ho trovato on-line li avevano. Ma non era il problema.

Ho un piccolo test.html con il seguente:

<body>
<form action="" method="post"> 
<p><label for="id_tag_list">Tag list:</label> 
<input id="id_tag_list" name="tag_list" maxlength="200" type="text" /> </p> 
<input type="submit" value="Submit" /> 
</form> 
</body>

E questa è la chiamata JQuery per aggiungere completamento automatico all'ingresso.

function formatItem_tag_list(row) {
    return row[2]
}
function formatResult_tag_list(row) {
    return row[1]
}

$(document).ready(function(){
    $("input[id='id_tag_list']").autocomplete({
        url:'http://gladis.org/ajax/tag',
        formatItem: formatItem_tag_list,
        formatResult: formatResult_tag_list,
            dataType:'text'
    }); 
});

Quando sto scrivendo qualcosa dentro il Textfield Firefox (Firebug) e cromo browser indica che che ci sia una chiamata AJAX, ma senza risposta. Se ho appena copio la linea in mio browser, posso vedere la risposta. (questo problema è risolto, è stata una caratteristica di sicurezza da Ajax a non ottenere i dati da un altro dominio)

Per esempio, quando sto scrivendo Bi nel campo di testo, l'URL " http: // Gladis .org / ajax / tag q = Bi & max ... viene generato quando si entra in questa nel tuo browser si ottiene questa risposta:?.

4|Bier|Bier
43|Kolumbien|Kolumbien
33|Namibia|Namibia

Ora la mia chiamata ajax ottenere la risposta corretta, ma non esiste ancora un elenco che mostra il passo con tutte le voci possibili. Ho provato anche per formattare l'output, ma questo non funziona neanche. Ho impostato brakepoints alla funzione e si rese conto che non saranno chiamati a tutti.

Ecco un link al mio minimo http://gladis.org/media/input. html

Qualcuno ha un'idea che cosa ho fatto di sbagliato. Ho anche caricato tutti i file come una piccola zip a http://gladis.org/media/ example.zip .

Grazie per il vostro aiuto!

[Edit] ecco i conf URL:

(r'^ajax/(?P<channel>[a-z]+)$', 'ajax_select.views.ajax_lookup'),

e la configurazione dei canali di ricerca ajax

AJAX_LOOKUP_CHANNELS = {
    # the simplest case, pass a DICT with the model and field to search against :
    'tag' : dict(model='htags.Tag', search_field='text'),
}

e la vista:

def ajax_lookup(request,channel):
    """ this view supplies results for both foreign keys and many to many fields """

    # it should come in as GET unless global $.ajaxSetup({type:"POST"}) has been set
    # in which case we'll support POST
    if request.method == "GET":
        # we could also insist on an ajax request
        if 'q' not in request.GET:
            return HttpResponse('')
        query = request.GET['q']
    else:
        if 'q' not in request.POST:
            return HttpResponse('') # suspicious
        query = request.POST['q']

    lookup_channel = get_lookup(channel)

    if query:
        instances = lookup_channel.get_query(query,request)
    else:
        instances = []

    results = []
    for item in instances:
        results.append(u"%s|%s|%s" % (item.pk,lookup_channel.format_item(item),lookup_channel.format_result(item)))

    ret_string = "\n".join(results)
    resp = HttpResponse(ret_string,mimetype="text/html")
    resp['Content-Length'] = len(ret_string)
    return resp
È stato utile?

Soluzione 4

Ho trovato una soluzione, ma ben io ancora non so perché il primo approccio non ha funzionato. Ho appena passato a una libreria diversa. Scelgo http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete / . Questo è in realtà promosso da jQuery e funziona;)

Altri suggerimenti

Probabilmente bisogno slash alla fine dell'URL.

Inoltre, il selettore di jQuery è sbagliato. Non hai bisogno di citazioni all'interno delle parentesi quadre. Tuttavia, che il selettore è meglio scritto così in ogni caso:

$("input#id_tag_list")

o semplicemente

$("#id_tag_list")

risposta separata perché ho solo pensato di un'altra possibilità: è la pagina statica viene servito dallo stesso dominio, come la chiamata Ajax (gladis.org)? In caso contrario, la politica dello stesso dominio impedirà Ajax vengano caricati.

Per inciso, supponendo che il document.ready è nel modello Django, sarebbe una buona idea di utilizzare il tag {% url%} invece di hardcoding tuo URL.

$(document).ready(function(){
    $("input[id='id_tag_list']").autocomplete({
        url:'{% url my_tag_lookup %}',
        dataType:'text'
    }); 
});

In questo modo i JS snippet sarà reso con l'URL calcolata e il codice rimarrà portabile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top