Saya mencoba menemukan contoh yang berfungsi dari elemen ketikahead bootstrap twitter yang akan membuat panggilan ajax untuk mengisi dropdown itu.
Saya memiliki contoh autocomplete jquery yang sudah ada yang mendefinisikan url ajax dan bagaimana memproses balasannya
<script type="text/javascript">
//<![CDATA[
$(document).ready(function() {
var options = { minChars:3, max:20 };
$("#runnerquery").autocomplete('./index/runnerfilter/format/html',options).result(
function(event, data, formatted)
{
window.location = "./runner/index/id/"+data[1];
}
);
..
Apa yang perlu saya ubah untuk mengonversikan ini ke contoh typeahead?
<script type="text/javascript">
//<![CDATA[
$(document).ready(function() {
var options = { source:'/index/runnerfilter/format/html', items:5 };
$("#runnerquery").typeahead(options).result(
function(event, data, formatted)
{
window.location = "./runner/index/id/"+data[1];
}
);
..
Saya akan menunggu masalah ' Tambahkan dukungan sumber jarak jauh untuk typeahead ' diselesaikan.
Jawaban:
Sunting: typeahead tidak lagi dibundel dalam Bootstrap 3. Periksa:
Mulai dari Bootstrap 2.1.0 hingga 2.3.2, Anda dapat melakukan ini:
Untuk mengkonsumsi data JSON seperti ini:
Perhatikan bahwa data JSON harus dari tipe mime yang tepat (aplikasi / json) sehingga jQuery mengenalinya sebagai JSON.
sumber
get
bukangetJSON
? Tampaknya lebih tepat.Anda dapat menggunakan garpu BS Typeahead yang mendukung panggilan ajax. Maka Anda akan dapat menulis:
sumber
["aardvark", "apple"]
,. Saya harus secara eksplisit mengaturdataType
parameter dalam$.post
panggilan. Lihat jQuery.post () .Content-type
tajuk keapplication/json
source
fungsi untuk dieksekusi.Mulai dari Bootstrap 2.1.0:
HTML:
Javascript:
Sekarang Anda dapat membuat kode terpadu, menempatkan tautan "json-request" dalam kode HTML Anda.
sumber
$(this)[0].$element.data('link')
.this.$element.data('link')
Semua tanggapan merujuk pada BootStrap 2 typeahead, yang tidak lagi ada di BootStrap 3.
Untuk siapa pun yang diarahkan di sini mencari contoh AJAX menggunakan Twitter postah -Bootstrap typeahead.js baru , inilah contoh yang berfungsi. Sintaksnya sedikit berbeda:
Contoh ini menggunakan saran sinkron (panggilan ke processSync ) dan asinkron, sehingga Anda akan melihat beberapa opsi segera muncul, lalu yang lain ditambahkan. Anda bisa menggunakan satu atau yang lain.
Ada banyak acara bindable dan beberapa opsi yang sangat kuat, termasuk bekerja dengan objek daripada string, dalam hal ini Anda akan menggunakan fungsi tampilan kustom Anda sendiri untuk membuat item Anda sebagai teks.
sumber
["Thing 1","Thing 2"]
, atau dengan fungsi tampilan kustom, array objek sesuai dengan kebutuhan Anda, misalnya[{"id":1,"label":"Foo"},{"id":2,"label":"Bar"}]
[{"id":1,"label":"Foo"},{"id":2,"label":"Bar"}]
, Sekarang saya ingin menampilkan dua kolom dalam dropdown typeahead dengan id dan label. Bagaimana saya bisa melakukan itu?Saya telah menambahkan plugin Bootstrap typeahead asli dengan kemampuan ajax. Sangat mudah digunakan:
Inilah repo github: Ajax-Typeahead
sumber
JSON
terlihat? Saya mendapatkanUncaught TypeError: Cannot read property 'length' of undefined
. Saya menggunakanjson_encode($array)
dan mengirim header kanan ('Content-Type: application/json; charset=utf-8'
). versi jqueryjQuery v1.9.1
Saya melakukan beberapa modifikasi pada jquery-ui.min.js:
dan tambahkan css berikut
Bekerja dengan sempurna.
sumber
Saya menggunakan metode ini
sumber
Seseorang dapat membuat panggilan dengan menggunakan Bootstrap. Versi saat ini tidak memiliki masalah pembaruan sumber. Pemutakhiran yang bermasalah Sumber data bootstrap typeahead dengan respons pos , yaitu sumber bootstrap yang pernah diperbarui dapat dimodifikasi lagi.
Lihat contoh di bawah ini:
sumber
Bagi mereka yang mencari versi coffeescript dari jawaban yang diterima:
sumber
Saya telah melalui posting ini dan semuanya tidak ingin bekerja dengan benar dan akhirnya mengumpulkan bit dari beberapa jawaban jadi saya memiliki demo kerja 100% dan akan menempelkannya di sini untuk referensi - tempelkan ini ke dalam file php dan pastikan termasuk dalam tempat yang tepat.
sumber
Coba ini jika layanan Anda tidak mengembalikan header jenis konten aplikasi / json yang tepat:
sumber
PEMBARUAN: Saya memodifikasi kode saya menggunakan garpu ini
juga alih-alih menggunakan $ .each, saya mengubah ke $ .map seperti yang disarankan oleh Tomislav Markovski
Namun saya menghadapi beberapa masalah dengan mendapatkan
seperti yang Anda lihat pada posting yang lebih baru, saya mencoba mencari tahu di sini
semoga pembaruan ini dapat membantu Anda ...
sumber
Array.map
sebagai gantinya$.each
dan mengganti konten seluruhsuccess
fungsi panggilan balik Anda denganvar manufacturers = results.data.manufacturers.map(function (item) { return { id: item.Manufacturer.id, manufacturer: item.Manufacturer.manufacturer } });
Saya tidak memiliki contoh yang baik untuk Anda dan saya juga tidak memiliki solusi yang sangat bersih, tetapi izinkan saya memberi tahu Anda apa yang saya temukan.
Jika Anda melihat kode javascript untuk TypeAhead terlihat seperti ini:
Kode ini menggunakan metode "grep" jQuery untuk mencocokkan elemen dalam array sumber. Saya tidak melihat tempat yang bisa Anda hubungi dengan panggilan AJAX, jadi tidak ada solusi "bersih" untuk ini.
Namun, satu cara yang bisa Anda lakukan adalah mengambil keuntungan dari cara metode grep bekerja di jQuery. Argumen pertama untuk grep adalah array sumber dan argumen kedua adalah fungsi yang digunakan untuk mencocokkan array sumber (perhatikan Bootstrap memanggil "pencocokan" yang Anda berikan saat menginisialisasi). Apa yang bisa Anda lakukan adalah mengatur sumber ke array satu elemen dummy dan mendefinisikan pencocokan sebagai fungsi dengan panggilan AJAX di dalamnya. Dengan begitu, ia akan menjalankan panggilan AJAX sekali saja (karena array sumber Anda hanya memiliki satu elemen di dalamnya).
Solusi ini bukan hanya peretasan, tetapi akan mengalami masalah kinerja karena kode TypeAhead dirancang untuk melakukan pencarian pada setiap penekanan tombol (panggilan AJAX harus benar-benar hanya terjadi pada setiap beberapa penekanan tombol atau setelah waktu idle tertentu). Saran saya adalah untuk mencobanya, tetapi tetap dengan perpustakaan autocomplete yang berbeda atau hanya gunakan ini untuk situasi non-AJAX jika Anda mengalami masalah.
sumber
saat menggunakan ajax, coba
$.getJSON()
alih-alih$.get()
jika Anda memiliki masalah dengan tampilan hasil yang benar.Dalam kasus saya, saya hanya mendapatkan karakter pertama dari setiap hasil ketika saya menggunakan
$.get()
, meskipun saya menggunakanjson_encode()
sisi server.sumber
saya gunakan
$().one()
untuk menyelesaikan ini; Ketika halaman dimuat, saya mengirim ajax ke server dan menunggu untuk selesai. Kemudian berikan hasil ke fungsi.$().one()
adalah penting. Karena memaksa typehead.js untuk melampirkan input satu kali. maaf atas tulisan yang buruk.sumber
?>
sumber