2015-04-02 2 views
-1

Это мой php-файл. Я хочу autosuggest для моего текстового поля, которое не работает. У меня есть 3-4 источника автозапуска.WHy my autocomplete ничего не говорит

<?php 
$con =mysqli_connect("due connectn attributes"); 
$return_arr = array(); 
$search = mysqli_real_escape_string($_GET["term"]); 
if (!$search) return; 
$sql = "SELECT PName, PNo FROM PlayerDetails WHERE PName LIKE '%$search%'"; 
$sql = mysqli_query($sql); 

while ($row = mysqli_fetch_assoc($sql)){ 
    $row_array['PNo'] = $row['PNo']; 
    $row_array['PName'] = $row['PName']; 
    //echo "$PName|$PNo\n"; 

      array_push($return_arr, $row_array); 
      /* Toss back results as json encoded array. */ 
      echo json_encode($return_arr); 
} 
mysqli_close($con); 
?> 

Javascript часть:

<script src="/_js/jquery-2.1.3.min.js"></script> 
<script src="/_js/jquery-ui.min.js"></script> 
<script> 
$(document).ready(function() { 
    $("#auto").autocomplete({ 
      source: "../_php/search.php", 
      autoFocus:true 
      } 
     }); 
     }); //end READY 

</script> 

HTML-часть:

<p> 
    <label for="Username">Username:</label> 
    <input type="text" name="auto" id="auto"> 
</p> 
+2

Какая ошибка вы получаете в консоли? –

+0

Предупреждение: include() [function.include]: Неверное открытие '../_php/search.php' для включения (include_path = '.:/Usr/local/php-5.3.29/share/pear') – Nikhil

+0

So у вас неправильный путь '../_ php/search.php' Вы можете проверить, находится ли' search.php' в папке, которая находится над папкой '_php'? –

ответ

0

Вы не можете генерировать мультипликатор JSON кодирует; который не дает вам никакого действительного JSON, и jQuery проигнорирует его.

while ($row = mysqli_fetch_assoc($sql)) { 
    $row_array['PNo'] = $row['PNo']; 
    $row_array['PName'] = $row['PName']; 
    array_push($return_arr, $row_array); 
    /* Toss back results as json encoded array. */ 
    echo json_encode($return_arr); 

}

echo json_encode($return_arr); должно происходить только один раз после того, как mysqli_close:

array_push($return_arr, $row_array); 

} /* Перемешайте назад результаты в виде JSON закодированные массив. */ echo json_encode ($ return_arr);

Кроме того, только в том случае, выводить JSON заголовки Content-Type:

} 
/* Toss back results as json encoded array. */ 
Header("Content-Type: application/json; charset=UTF-8"); 
die(json_encode($return_arr)); 

Наконец, вы сообщите об этой ошибке в ваш комментарий:

<b>Warning</b>: include() [<a href='function.include'>function.include</a>]: Failed opening '../_php/search.php' for inclusion (include_path='.:/usr/local/php-5.3.29/share/pear') 

Эта ошибка может быть вызвана одной вещи только: вы должны быть , включая PHP сценарий search.php. То есть в некоторых из ваших PHP скриптов есть

include '../_php/search.php'; 

Это не должно быть сделано - search.php должен быть независимым PHP скрипт и он должен возвращать действительный JSON, если вы вызовите его URL из браузера, как это:

http://<yoursite>/_php/search.php?term=% 

т.е. он должен возвращать что-то вроде

[["PnoNumber1":"PNameNumber1"],["PnoNumber2":"PNameNumber2"]] 

организации файлов (есть более чем один способ сделать это)

Файл HTML может быть там, где вы хотите, скажем, что в /_html/page.html

Этот файл содержит необходимый JS код, который живет в/_js, так и /_js/jquery.min.js скоро.

PHP вызывается кодом Javascript внутри HTML, как описано в другом ответе. Когда вы добавляете URL-адрес «search.php» в свой Javascript, это генерирует новый вызов браузера , который имеет собственный жизненный цикл в AJAX. Этот вызов должен быть способен «жить» сам по себе, поэтому он также должен работать, если вы используете его в адресной строке браузера. В противном случае он не будет работать и в сценарии.

Так, чтобы проверить, что скрипт работает (конечно, вы можете также использовать такие инструменты, как Firebug) вы можете вызвать его из браузера:

http://<yoursite>/_php/search.php?term=% 

Скрипт должен затем подключиться к базе данных и выполнить запрос, возвращая действительный JSON в том формате, который ожидает Autocomplete. Поэтому в ответ на вызов выше вы должны увидеть действительный JSON в окне браузера.

Функция .autocomplete корректно связана с $ ('# auto'), и поле ввода действительно имеет идентификатор 'auto'. Таким образом, вызов будет сгенерирован. URI, который вы помещаете в javascript, должен быть действительным со ссылкой на javascript, поэтому, если форма живет в /_html/searchpage.html и скрипт в /_php/search.php, относительный URI будет ../ _php/search.php (конечно, если форма находится в /_html/forms/search.html, вам понадобится ../../_php/search.php и т. д.).

+0

Я НЕ МОГУ понять это. Вы хотели сказать, что search.php должен быть помещен в ту же папку, где находится html-файл. Чтобы эта ошибка была сгенерирована, вы должны включить PHP в скрипт search.php. Это не должно быть сделано. Search.php должен быть независимым PHP-скриптом и должен возвращать действительный JSON, если вы вызываете его URL-адрес следующим образом: /_php/search.php?term=% это путь после ввода текста некоторые символы или поместите этот путь в javascript. – Nikhil

+0

Нет, вы совсем не плохо на английском. ответьте на мой запрос выше для пути – Nikhil

+0

Ваш поиск.php может быть там, где вы хотите. /_php/search.php - это хорошо. Замечание PHP, которое вы отмечаете, означает, что ** какой-то другой скрипт ** включает search.php, но это не нужно, и это не должно быть сделано. Я отредактирую ответ – LSerni

1

У вас есть ошибка синтаксиса:

$(document).ready(function() { 
    $("#auto").autocomplete({ 
     source: "../_php/search.php", 
     autoFocus:true 
    }); //<----should be closed like this. 
}); 
+0

Я сделал это, но ничего не произошло. Если у вас есть другой способ сделать аутсорсинг, скажите, пожалуйста. У меня проблема с пониманием PDO-кодов. – Nikhil

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