veritabanı ile jQuery UI otomatik tamamlama

6 Cevap php

Ben JQuery için oldukça yeni ve belki de yeni başlayanlar için zor Abit olabilir bir şey elde etmek için çalışıyoruz. Ancak ben bir PHP komut dosyası için geçerli değerini gönderir ve daha sonra gerekli değerleri döndüren bir otomatik tamamlama oluşturmak çalışıyorum.

İşte benim Javascript kodu

$("#login_name").autocomplete({
    source: function(request, response) {
 $.ajax({
     url: "http://www.myhost.com/myscript.php",
     dataType: "jsonp",

     success: function(data) {
  alert(data);
  response($.map(data, function(item) {
      return {
   label: item.user_login_name,
   value: item.user_id
      }
  }))
     }
 })
    },
    minLength: 2
});

Ve burada "myscript.php" son yarısı

while($row = $Database->fetch(MYSQLI_ASSOC))
{
    foreach($row as $column=>$val) 
    {
        $results[$i][$column] = $val;
    }
    $i++;
}
print json_encode($results);

Aşağıdaki çıktıyı üretir

[{"user_id":"2","user_login_name":"Name1"},{"user_id":"3","user_login_name":"Name2"},{"user_id":"4","user_login_name":"Name3"},{"user_id":"5","user_login_name":"Name4"},{"user_id":"6","user_login_name":"Name5"},{"user_id":"7","user_login_name":"Name6"}]

Ben yanlış lütfen gidiyorum nerede kimse bana söyleyebilir misiniz? Oldukça sinirli almaya başlıyor. Giriş kutusu, sadece "beyaz" döner ve hiçbir seçenekler gösterilir. Ben bir değerler dizisi belirtirseniz kod çalışır.

UPDATE I have changed the code to and still having no luck.

$("#login_name").autocomplete({
    source: "/ajax/login_name.php",
    dataType: "json",
    minLength: 2,
    cache: false,
    select: function(event, ui) {
        alert(ui);
    }
});

Firefox'un Web Developer aracını kullanarak, ben bir hata alıyorum "b null".

6 Cevap

Sonunda benim ihtiyaçlarına uygun çözüm bulundu

$("#login_name").autocomplete({
  source: function(request, response){
    $.post("/ajax/login_name.php", {data:request.term}, function(data){     
        response($.map(data, function(item) {
        return {
            label: item.user_login_name,
            value: item.user_id
        }
        }))
    }, "json");
  },
  minLength: 2,
  dataType: "json",
  cache: false,
  focus: function(event, ui) {
    return false;
  },
  select: function(event, ui) {
    this.value = ui.item.label;
    /* Do something with user_id */
    return false;
  }
});

bazı öneriler:

  1. Neden dataType= "jsop"? Bu jsonp olmak görünmüyor. Sana "json" istediğini düşünüyorum.
  2. de, seçenekleri bir cache : false yerleştirin. Bu istek her zaman yapılır ve asla tarayıcı tarafı önbellekten karşılanır sigortalanır.
  3. çağrı dışarı gidiyor ise Fiddler veya Charles gibi bir şey ile, kontrol edin.
  4. başarı fn denilen olsun ki? Bir alert() orada var. Çağrılır olsun mu?
  5. Firebug veya IE8 geliştirici araçları varsa, parametrelerin değerini doğrulamak için alert() üzerine bir kesme noktası koyabilirsiniz.
  6. Why specify the full hostname in the URL? Last night I had an odd situation with autocomplete where the response was null, the empty string, when I used a different hostname for the page and the Ajax request. When I modified it to use the same hostname, the request succeeded. Actually because of the same origin policy, you should have no hostname at all in the URL for the ajax call.

Evet kendi json için başlık bilgisi gerekiyor

        header("Expires: Mon, 26 Jul 1997 05:00:00 GMT" ); 
        header("Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" ); 
        header("Cache-Control: no-cache, must-revalidate" ); 
        header("Pragma: no-cache" );
        header("Content-type: text/x-json");

ve tvanfosson fiş Abut iyi bir nokta yapar

Anycase ben size eklenti yapar ajax arama yapmak sanmıyorum.

infact kullanıyorsanız jquery-ui autocomple Eğer belgeleri temel bir sürümünü çalıştıran almak üzerine okumalısınız. php eksik başlık verisinden kenara para cezası

Durumda başkasının ihtiyacı:

JQuery UI otomatik tamamlama için belgeleri kullanmak için sorgu dizesi parametresi 'term' olduğunu belirtir ve değil 'q' ... ya da en azından şimdi yok.

E.g. http://www.myhost.com/myscript.php?term=someToSearchFor

map yapısı gibi bir dizi ya da dizi bekler iken bir JSON strcuture, düz bir dizedir. Harita ile önce dize json decode deneyin.

Ben de senin gibi bir sorun vardı. Ve şimdi ben bunu düzeltmek. Sorun, bir sözdizimi hatası içeren benim sunucudan dönmek benim json olduğunu.

In http://api.jquery.com/jQuery.getJSON/ bazı hata JSON varsa, sessizce başarısız olacağını söyler. JSON burada JSON standardını eşleşmelidir http://json.org/.

Benim hata için JSON benim dize tek bir alıntı sarma olduğunu. Ama JSON, standart çift tırnak tek dize o şal kabul.

örn. "Merhaba Dünya" değil 'Merhaba Dünya'

Bunu düzeltmek zaman dize URL olarak kaynağını ayarlayabilirsiniz. Terimi "terimi," Sorgu dizesinde olacaktır. Ve işe yarıyor!