Отправить поисковый запрос и получить результат поиска без обновления - PullRequest
8 голосов
/ 19 июня 2010

Я хочу отправить поисковый запрос форму и получить результат поиска без перенаправление / перезагрузка / обновление на той же странице .

Мое содержимое является динамическим, поэтому нельзя использовать те, которые "отправляют контактную форму без обновления страницы, которая отвечает в случае успеха".

Ответы [ 4 ]

27 голосов
/ 19 июня 2010

Чтобы отправить форму, собрать результаты из базы данных и представить их пользователю без обновления, перенаправления или перезагрузки страницы, вам необходимо:

  1. Использовать Ajax дляОтправьте данные из вашей формы в файл php;

  2. Этот файл в фоновом режиме запросит базу данных и получит результаты для данных, которые он получил;

  3. Получив результат запроса, вам нужно будет вставить его в элемент HTML на вашей странице, который готов представить результаты пользователю;

  4. Наконец, вынужно установить некоторые управляющие элементы, чтобы стили и рабочий процесс документа работали гладко.


Итак, сказав это, вот рабочий пример:

У нас естьТаблица "лица" с полем "возраст" и полем "имя", и мы будем искать людей с возрастом 32. Далее мы представим их имена и возраст внутри div с table с розовымфон и очень большой текст.
Чтобы правильнопроверьте это, у нас будет заголовок, тело и нижний колонтитул с серыми цветами!

index.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html lang="pt" dir="ltr">

  <head>

    <title>Search And Show Without Refresh</title>

    <meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
    <meta http-equiv="Content-Style-Type" content="text/css">

    <!-- JQUERY FROM GOOGLE API -->
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>

    <script type="text/javascript">
      $(function() {
        $("#lets_search").bind('submit',function() {
          var value = $('#str').val();
           $.post('db_query.php',{value:value}, function(data){
             $("#search_results").html(data);
           });
           return false;
        });
      });
    </script>

  </head>

  <body style="margin:0;padding:0px;width:100%;height:100%;background-color:#FFFFFF;">

    <div style="width:1024px;margin:0 auto;height:100px;background-color:#f0f0f0;text-align:center;">
      HEADER
    </div>
    <div style="width:1024px;margin:0 auto;height:568px;background-color:#f0f0f0;text-align:center;">
      <form id="lets_search" action="" style="width:400px;margin:0 auto;text-align:left;">
        Search:<input type="text" name="str" id="str">
        <input type="submit" value="send" name="send" id="send">
      </form>
      <div id="search_results"></div>
    </div>
    <div style="width:1024px;margin:0 auto;height:100px;background-color:#f0f0f0;text-align:center;">
      FOOTER
    </div>

  </body>

</html>

db_query.php

<?php

define("HOST", "localhost");

// Database user
define("DBUSER", "username");

// Database password
define("PASS", "password");

// Database name
define("DB", "database_name");

// Database Error - User Message
define("DB_MSG_ERROR", 'Could not connect!<br />Please contact the site\'s administrator.');

############## Make the mysql connection ###########

$conn = mysql_connect(HOST, DBUSER, PASS) or die(DB_MSG_ERROR);

$db = mysql_select_db(DB) or die(DB_MSG_ERROR);


$query = mysql_query("
  SELECT * 
  FROM persons 
  WHERE age='".$_POST['value']."'
");

echo '<table>';

while ($data = mysql_fetch_array($query)) {

  echo '
  <tr style="background-color:pink;">
    <td style="font-size:18px;">'.$data["name"].'</td>
    <td style="font-size:18px;">'.$data["age"].'</td>
  </tr>';

}

echo '</table>';

?>

Управляющий материал зависит от того, что вы хотите, но используйте этот код, поместите эти два файла в один и тот же каталог, и у вас все будет хорошо!

Любые проблемы или более понятный кодпожалуйста, дайте нам знать;)

1 голос
/ 19 июня 2010

Возможно, вы захотите начать с любого из тысяч учебных пособий "AJAX для начинающих", которые вы можете найти в сети.Поиск Google с этим термином должен помочь вам.

Попробуйте это для начала:

http://www.destraynor.com/serendipity/index.php?/archives/29-AJAX-for-the-beginner.html

После прочтения, имейте в виду, чтона самом деле не нужно писать какой-либо код обработки XHR.Как отметил Jamie, jQuery или любое другое множество библиотек Javascript может значительно упростить ваш AJAX-код на стороне клиента.

1 голос
/ 19 июня 2010

Хорошо, если вы сможете получить некоторые основы Ajax, прежде чем сразу же перейти к коду.Ajax, это точное решение вашей проблемы.Он асинхронно делает запрос к серверу, получает результат, и данные на странице могут быть изменены с результатом.Все это делается в JavaScript.

Предположим, у вас есть HTML, как это:

<html>
<body>
<div id="myDiv"> your content area</div>
<button type="button" onclick="loadByAjax()">Change Content</button>
</body>
</html> 

Теперь ваш код javascipr будет выглядеть так:в основном при нажатии кнопки, JavaScript будет выполнен.Он вызовет серверный скрипт php, передаст параметры, полученные из пользовательского ввода, извлечет данные ответа и поместит их в div.Поэтому ваша страница обновляется без полного обновления.

Также, пожалуйста, поймите, что я использовал здесь библиотеку jquery для функции Ajax.

1 голос
/ 19 июня 2010

Это то, для чего предназначен AJAX. В jQuery (извините, если вы ищете другую библиотеку)

$("form#search").bind('submit',function() {
  $.post("search.php",this.serialize(),function(data) { 
    // Put the code to deal with the response data here
  });
  return false;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...