2013-12-10 5 views
0
$(function() { 
    $("#search").autocomplete({ 
     source: ["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby"] 
    }).focus(); 

    $.ajax({ 
     url: "source.php", 
     success: function(result) { 
      return result; 
      //["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby"] 
     } 
    }); 

}); 

Вопрос: как заменить статический источник в автозаполнении с результатами ajax?слияние результатов от ajax до источника автозаполнения

Идея:

$("#search").autocomplete({ 
    source: //result from ajax function 
}).focus(); 

Source.php (просто пример)

<?php 

mysql_connect('localhost', 'root', ''); 
mysql_select_db('test'); 

$query = mysql_query("SELECT name FROM tags"); 

while ($row = mysql_fetch_array($query)) { 
    $results[] = $row['name']; 
} 

echo json_encode($results); 
?> 
+0

Michal, я думаю, это зависит от того, что ответ от запроса ajax – Leo

+0

@Leo Я положил ответ от ajax в комментарии (в результате). Это то же самое, что и статические данные в источнике. –

ответ

0

1) Объявляет глобальный массив переменной и изменить там значения, в случае необходимости.

var languages = $.ajax({ 
     url: "source.php", 
     success: function(result) { 
      return result; 
      //["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby"] 
     } 
    }); 

$("#search").autocomplete({ 
     source: languages 
    }).focus(); 

2) или объединить ajax with autocomplete

$(function() { 
    $("#city").autocomplete({ 
     source: function (request, response) { 
      $.ajax({ 
       url: "source.php", 
       success: function (data) { 
        return data; 
       } 
      }); 
     } 
    }); 
}); 
0

Я думаю, что вам нужно Concat два массива (первый список слов и тот, который вы получите ajax), а затем снова вызовите .autocomplete();

var words = ["c++", "java", "php", "coldfusion", "javascript", "asp", "ruby"] 
$(function() { 
    /** This part is only necessary if the ajax does not fire immediately when the page is loaded **/ 
    $("#search").autocomplete({ 
     source: words 
    }).focus(); 
    /** end of what I said above **/ 
    $.ajax({ 
     url: "source.php", 
     success: function(result) { 
      words = words.concat(result); 
      $("#search").autocomplete({ 
       source: words 
      }).focus(); 
     } 
    }); 

}); 
0

Вы должны пользователь function as a source с двумя аргументами:

$("#search").autocomplete({ 
    source: function (request, response) { 
     $.ajax({ 
      url: "source.php", 
      data: {query: request.term}, 
      success: function(result) { 
       response(result); 
      } 
     }); 
    } 
}).focus(); 

Если вы наберете "PHP" в поле, он будет выдавать запрос AJAX до source.php?query=php.

+0

Я добавил source.php, чтобы вы могли видеть, что я не разбираю аргументы source.php. Я просто просто эхо результаты в качестве данных для 'source' в' autocomplete' функции. –

+0

Зачем вам нужен автозаполнение ajax? Вы можете просто предварительно загрузить эти данные с загрузкой страницы и немедленно ее загрузить. Во всяком случае, просто не используйте параметр 'data'. – dfsq

Смежные вопросы