Post запрос без перезагрузки страницы

Статус
В этой теме нельзя размещать новые ответы.

yeaahhh

Старатель
Регистрация
8 Май 2008
Сообщения
278
Реакции
11
Друзья. Помогите , пожалуйста сделать добавление информации и её отображение без перезагрузки страницы. Насколько я понял, в этом может помочь AJAX.
Прочитал пару статей о нём, принцип добавления вроде бы понял, но плохо разбираюсь в новых для меня "методах"..
Не могли бы мне помочь с реализацией?

Значит есть php-файл с формой добавления информации, обработкой этой самой информации(заносом в БД) и её отображением:
PHP:
// Добавление
<form action='' method='post'>
<input name='login'>
<input type="submit" name="submit" value="Отправить" />
</form>
//Обработка
if (isset($_POST['login']))
{
include ("config.php");
$login = trim(stripslashes(htmlspecialchars($_POST['login'])));
$query = mysql_query("INSERT INTO users (login) VALUES ('$login')",$db);
if ($query == 'true') { 
$status = "Юзер добавлен";
} else {$status = "Юзер не добавлен.";};
echo $status;
}  
// Отображение
тут непосредственно код отображения(запрос к БД и вывод информации в цикле)..

Не могли бы вы набросать полностью работающий код AJAX, чтобы я смог понять эту тему и самостоятельно оперировать с добавлением в БД без перезагрузки страницы в дальнейшем?
Заранее большое спасибо..
P.S. Погуглив, нашёл несколько статей с мануалами, но сделать так и не получилось.. Решил, что лучше пойму как и что делать здесь, на форуме..
 
пройди по ссылке _http://dklab.ru/lib/JsHttpRequest/, там и описание, и примеры, все рабочее и обкатанное. Разобраться, настроить и подключить проблем не вызывает.
 
Реализовал без помощи JsHttpRequest..
Вот код ява-скриптовой части:
HTML:
<script type="text/javascript" language="javascript">
var req = Create();

function ge(id)
{
    return document.getElementById(id);
}

function Create(){ 
if(navigator.appName == "Microsoft Internet Explorer"){ 
req = new ActiveXObject("Microsoft.XMLHTTP"); 
}else{ 
req = new XMLHttpRequest(); 
} 
return req; 
} 

function Request(query)
{
req.open('post', 'voprosi.php' , true );
req.onreadystatechange = Refresh;
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=Windows-1251");
req.send(query); 
} 

function Refresh()
{
    if( req.readyState == 4 )
    ge('ajax').innerHTML = req.responseText;
    else
    ge('ajax').innerHTML = '<img src="/images/ajax-loader.gif" />';

}
function addanonym()
{ 
var query; 

var vid = encodeURIComponent(document.getElementById('vid').value);
var email = encodeURIComponent(document.getElementById('email').value);
var antext = encodeURIComponent(document.getElementById('antext').value);
var anpoluchatel = encodeURIComponent(document.getElementById('anpoluchatel').value);

var query = 'anpoluchatel='+anpoluchatel+'&email='+email+'&vid='+vid+'&antext='+antext; 

Request(query);
}
</script>
вот php код обработки:
PHP:
<?php
include ("config.php");

header('Content-Type: text/html; charset=Windows-1251'); 

$vid = isset($_POST['vid'])?$_POST['vid']:NULL;
$email = isset($_POST['email'])?$_POST['email']:NULL;
$text = isset($_POST['antext'])?$_POST['antext']:NULL;
$poluchatel = isset($_POST['anpoluchatel'])?$_POST['anpoluchatel']:NULL;

$date = date("Y-m-d H:i:s");
$ip=getenv("HTTP_X_FORWARDED_FOR");
if (empty($ip) || $ip=='unknown') { $ip=getenv("REMOTE_ADDR"); }

$text = trim(stripslashes(htmlspecialchars($text)));
$email = trim(stripslashes(htmlspecialchars($email)));


$query = mysql_query("INSERT INTO voprosi (poluchatel, date, vid, text, email, ip) VALUES ('$poluchatel','$date','$vid','$text','$email','$ip' )",$db);
if ($query == 'true') { 
$status = "Анонимка добавлена";
} else {$status = "Анонимка не добавлена";};

echo $status;

?>

Добавлено через 3 минуты
Встала проблема кодировки.. В бд записываются каракули..
Может кто-нибудь подсказать, как исправить эту проблему?
И ещё один момент.. Можно ли сделать так, чтобы данные, которые я добавил, появлялись на странице без её перезагрузки?
Яркий пример того, чего я хочу - добавление сообщений на этом форуме. Нажал "Отправить быстрый ответ" и сообщение тут же добавилось..
Заранее большое спасибо..

---------- Post added at 02:48 ---------- Previous post was at 00:58 ----------

Проблему с кодировкой решил с помощью
PHP:
$text = mb_convert_encoding($text, "Windows-1251", "auto");


---------- Post added at 03:55 ---------- Previous post was at 02:48 ----------

Так каким же способом можно реализовать мгновенный вывод добавленной информации..?
 
Я ничего не понял из твоих вопросов.
Срабатывает функция function Refresh()?
Если да, то результат работы скрипта (echo $status;) должен выводится в вашем случае в элемент с id = ajax;
В html страницы должен быть к примеру
PHP:
<div id = ajax>Сюда будет вставлен результат работы скрипта</div>
Выглядеть все может где-то так:
PHP:
<html>
<head></head>
<body>
<table width=100%><tr>
<td width=75%>
<div id = ajax>Сюда будет выведено echo $status;</div>
</td>
<td width=25%>
<form action="" method="post" enctype="multipart/form-data">
<input name='login'>
<input type="submit" name="submit" value="Отправить" />
</form> 

</td></tr>
</table>
</body>
</html>

</body>
 
Вы немного меня не поняли..
С этим всё ок. Всё работает.
Но мне хотелось бы, чтобы сразу добавлялся комментарий, а не только надпись от echo $result..
Т.е. я вношу данные.. и там где вывод комментариев, появлялся бы новый комментарий, без перегазрузки страницы.. Не подскажешь, как можно реализовать?
 
ну так сделай запрос к базе и выведи результат.
 
rex1963, пойми.. У меня вывод комментариев и форма для их добавлений на одной странице. Я хочу, чтобы после заполнения формы и нажатию на добавить комментарий, он сразу же появлялся в списке комментариев. А сейчас у меня появляется только результат выполнения запроса на добавление:
HTML:
<div id = ajax>Комментарий добавлен\комментарий не добавлен</div>.
А сам комментарий, не отображается сразу.. Только после перезагрузки страницы.. Вот в чём мой вопрос..) Как сделать так, чтобы комментарий сразу же отобразился в списке комментариев?

Я полагаю, что нужно сделать ещё что-то типа этого, где будет вывод всех комментариев?
HTML:
<div id = comments>Вывод всех комментариев</div>
Как можно вывести файл с отображением комментариев в данную структуру?
HTML:
<div id = comments>Вывод всех комментариев</div>
 
Ребяяяяят, ну помогите плиз кто-нибудь.. Нужно вывести файл comments.php в
HTML:
<div id ='comments'></div>
Как я понял, это через innerHTML = '' Делается?
Напишите, пожалуйста, полностью скрипт подгрузки файла comments.php в фоновом режиме..
Уже второй день голову ломаю..
 
Этот скрипт, который ты подключаешь, делает запись в базу данных и выводит сообщение о результате этого процесса. За вывод записи ответственен наверняка другой скрипт, который ты не приводишь.
Если запись идет в поле text, то вывод можно оформить вот так
PHP:
  <?php
include ("config.php");

header('Content-Type: text/html; charset=Windows-1251'); 

$vid = isset($_POST['vid'])?$_POST['vid']:NULL;
$email = isset($_POST['email'])?$_POST['email']:NULL;
$text = isset($_POST['antext'])?$_POST['antext']:NULL;
$poluchatel = isset($_POST['anpoluchatel'])?$_POST['anpoluchatel']:NULL;

$date = date("Y-m-d H:i:s");
$ip=getenv("HTTP_X_FORWARDED_FOR");
if (empty($ip) || $ip=='unknown') { $ip=getenv("REMOTE_ADDR"); }

$text = trim(stripslashes(htmlspecialchars($text)));
$email = trim(stripslashes(htmlspecialchars($email)));


$query = mysql_query("INSERT INTO voprosi (poluchatel, date, vid, text, email, ip) VALUES ('$poluchatel','$date','$vid','$text','$email','$ip' )",$db);
if ($query == 'true') { 
$status = "Анонимка добавлена";
$id = mysql_insert_id(); //получаем идентификатор последней записи
//Делаем запрос к базе данных
$query = "SELECT * FROM voprosi
          WHERE id = $id LIMIT 1";

$new = mysql_query($query);

$news = mysql_fetch_array($new);
/*выводим текст сообщения без перезагрузки в 
<div id = ajax>Сюда будет вставлен результат работы скрипта</div>
*/
echo $news['text'];
} else {$status = "Анонимка не добавлена";};

echo $status;

?>
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху