2012-08-07 21 views
11

JSON aracılığıyla etiket ve değer özelliklerine sahip bir diziyi geçirme ile ilgili birçok soru gördüm, ancak geçen dizeleri çok fazla değil. Benim problemim, otomatik tamamlamamın dolduracağı görünmüyor. Ben bir dökümü işlevini koştu ve otomatik tamamlama için JSON yoluyla geçirilen bu örnek değerler alıyorum: fill_id.php İşteJQuery UI json ve ajax ile otomatik tamamlama

$("#auto_id").autocomplete({ 
    source: function(request,response) { 

     $.ajax ({ 
      url: "fill_id.php", 
      data: {term: request.term}, 
      dataType: "json", 
      success: function(data) { 
      //what goes here? 
       } 
    }) } 
    }); 

edilir: Burada

0: 23456 
1: 21111 
2: 25698 

bazı kod

$param = $_GET['term']; 
$options = array(); 


$db = new SQLite3('database/main.db'); 
    $results = $db->query("SELECT distinct(turninId) FROM main WHERE turninid LIKE '".$param."%'"); 


while ($row_id = $results->fetchArray()) { 
     $options[] = $row_id['turninId']; 
    } 
echo json_encode($options); 

Benim otomatik tamamlama boş kalır. JSON dizimi doldurmak için nasıl değiştiririm? Ya da ajax başarı fonksiyonuma ne ekleyebilirim?

jQuery UI Otomatik Tamamlama uzaktan demo çok yapışabilir

cevap

16

: otomatik tamamlanan liste halinde sonuçları almak için http://jqueryui.com/resources/demos/autocomplete/remote-jsonp.html

, bir etiket ve yanıt parametresine bir değere (bir nesne koymak zorunda olduğu sizin ajax başarı işlevi içinde bir fonksiyonu) aslında:

source: function(request, response) { 
    $.ajax({ 
     url: "fill_id.php", 
     data: {term: request.term}, 
     dataType: "json", 
     success: function(data) { 
      response($.map(data.myData, function(item) { 
       return { 
        label: item.title, 
        value: item.turninId 
       } 
      })); 
     } 
    }); 
} 

Ama yor biraz fill_id.php değiştirirseniz bu sadece çalışır:

// escape your parameters to prevent sql injection 
$param = mysql_real_escape_string($_GET['term']); 
$options = array(); 

// fetch a title for a better user experience maybe.. 
$db = new SQLite3('database/main.db'); 
    $results = $db->query("SELECT distinct(turninId), title FROM main WHERE turninid LIKE '".$param."%'"); 

while ($row_id = $results->fetchArray()) { 
    // more structure in data allows an easier processing 
    $options['myData'][] = array(
     'turninId' => $row_id['turninId'], 
     'title' => $row_id['title'] 
    ); 
} 

// modify your http header to json, to help browsers to naturally handle your response with 
header('Cache-Control: no-cache, must-revalidate'); 
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 
header('Content-type: application/json'); 

echo json_encode($options); 

Tabii ki, tablonuzda bir başlık veya herhangi bir şey olmadığında, cevabınızı olduğu gibi bırakabilir ve başarı geri dönüşünde kimliği tekrarlayabilirsiniz. Önemli bir değer/öğe çifti ile otomatik tamamlamada sizin response fonksiyonunu doldurmak olmasındandır:

// this will probably work without modifying your php file at all: 
response($.map(data, function(item) { 
    return { 
     label: item, 
     value: item 
    } 
})); 

düzenleme: yeni jQuery UI otomatik tamamlama ui referans linki güncellenen ben de doldurabilirsiniz düşündüm

+0

dizi sadece dizeleri ile? – hereiam

+0

Ayrıca, http'umun değiştirilmesi gerekli mi? Bunu daha fazla açıklayabilir misin? – hereiam

+0

Yardımlarınız için teşekkürler! Mükemmel çalıştı! – hereiam

İlgili konular