AJAX вызывает код PHP и получает ответ каждые несколько минут - PullRequest
1 голос
/ 28 июня 2009

Я пытаюсь создать очень простую доску объявлений (автор, текст и дата написания), которая будет автоматически обновляться каждые несколько мгновений, чтобы видеть, пришло ли новое сообщение, и если оно есть, автоматически загрузить последнее сообщение. (с).

Я владею PHP, но мне не хватает знаний в AJAX.

Как мне кажется, мне нужно было бы создать PHP-файл с именем get_messages.php, который бы подключался к базе данных и получал через переменную $_GET, возвращающую все посты после даты X, а затем я бы каким-то образом jquery вызывает этот файл PHP каждые несколько минут с $_GET=current time? Это звучит правильно?

Как бы я мог запросить и вернуть данные на веб-страницу асинхронно?

Ответы [ 3 ]

1 голос
/ 28 июня 2009

Вы довольно близки, вам понадобится PHP-скрипт, который может запросить базу данных о ваших результатах. Затем вы захотите преобразовать эти результаты в массив и json_encode () them:

$results = getMyResults();
/* Assume this produce the following Array:
   Array(
     "id" => "128","authorid" => "12","posttime" => "12:53pm",
     "comment" => "I completely agree! Stackoverflow FTW!"
   );
*/
print json_encode($results);
/* We'll end up with the following JSON:
   {
     {"id":"128"},{"authorid":"12"},{"posttime":"12:53pm"},
     {"comment":"I completely agree! Stackoverflow FTW!"}
   }
*/

Как только эти результаты будут в формате JSON, вы можете лучше обрабатывать их с помощью JavaScript. Используя jQuery ajax , мы можем сделать следующее:

setInterval("update()", 10000); /* Call server every 10 seconds */

function update() {
  $.get("serverScript.php", {}, function (response) {
    /* 'response' is our JSON */
    alert(response.comment);
  }, "json");
}

Теперь, когда у вас есть данные в javascript («ответ»), вы можете использовать информацию с сервера.

0 голосов
/ 28 июня 2009

Я предлагаю вам воспользоваться простым набором кодов AJAX (SACK), доступным в коде Google.

Я использую его с тех пор, как это было в коде Google. Это очень легко и просто. Это один файл JS, который вы должны включить. Я видел, что он также используется в онлайн-браузерных играх.

http://code.google.com/p/tw-sack/

Пример загрузки содержимого страницы из get_messages.php в div (если вас не интересует содержимое страницы из get_messages.php, и вы просто хотите вызвать php-файл, просто удалите строку ajax.element):

<script type="text/javascript" src="tw-sack.js"></script>
<script>
var ajax = new sack();
ajax.method = "GET";  // Can also be set to POST
ajax.element = 'my_messages'; // Remove to make a simple "ping" type of request
ajax.requestFile = "get_messages.php";
ajax.setVar("user_name","bobby");
ajax.setVar("other_variables","hello world");
ajax.setVar("time",dateObject.getTime());
ajax.onCompleted = whenCompleted;
ajax.runAJAX();

function whenCompleted(){
  alert('completed');
}
</script>

<div id="my_messages">Loading...</div>

Вам не нужно указывать «ajax.element», если вы хотите выполнить простой тип запроса «ping» и игнорировать вывод php-файла. Все, что вам нужно сделать для реализации ваших требований сейчас, это использовать "setTimeout", выполняющий вызовы ajax.

Есть также много других опций, таких как:

//ajax.onLoading = whenLoading;
//ajax.onLoaded = whenLoaded; 
//ajax.onInteractive = whenInteractive;

Не нужно учиться или включать огромные рамки. И вы быстро начнете с tw-sack.

0 голосов
/ 28 июня 2009

Не обращайте внимания на материал ASP.NET, эта ссылка является хорошим началом:

http://www.aspcode.net/Timed-Ajax-calls-with-JQuery-and-ASPNET.aspx

То, что вы собираетесь использовать, - это функция javascript setTimeout, которая асинхронно вызывает функцию javascript с интервалом. Оттуда в jQuery есть причудливая функция load, которая загружает результаты вызова AJAX в DIV или любой другой элемент, который вы ищете. Есть также множество других способов заставить JQuery изменять DOM так, как вам хочется.

Есть сотни способов сделать это, но я бы сказал, что избегайте написания простого Javascript, чтобы избежать головной боли кросс-браузерной функциональности, когда вы можете.

...