На моей странице есть доска комментариев, на которую я загружаю разные темы в зависимости от страницы, на которой находится пользователь, с помощью XMLHttpRequest в функции changeTopic(). Первоначально у меня было это в конце моей формы отправки php:
header('Location: http://' . $_SERVER['HTTP_HOST'] . $_POST['page']);
Проблема в том, что я не хочу обновлять всю страницу, а только DIV, содержащий сообщения. Я попытался запустить функцию changeTopic(), вставив ее в теги скрипта с эхом. Во-первых, я не смог получить .$_GET['topic']. работая внутри эха, даже если я сначала сделал его переменной, но также я попытался запустить функцию, жестко вставив одно из возможных значений со следующими результатами:
1) Хотя раздел сообщений обновился правильно, я потерял форму, поскольку она содержится в index.html, в то время как я загружаю сообщения только из внешнего gettopic.php со строкой запроса.
2) Я получил странный результат, когда я потерял внешний файл, который был загружен в совершенно другой div. Этот файл изменяет хэш главной страницы, который проверяется при каждом обновлении, и в соответствии с хешем загружается нужный файл, поэтому использование полного обновления страницы никогда не приводило к этому.
// РЕДАКТИРОВАТЬ
function changeTopic(topic) {
if (topic=="") {
document.getElementById("messagelist").innerHTML="";
return;
}
if (window.XMLHttpRequest) {
xmlhttp=new XMLHttpRequest();
}
else {
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
document.getElementById("messagelist").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST", "gettopic.php?t="+topic,true);
xmlhttp.send();
}
Основное приложение на моей странице — это карта SVG, которую я сделал с помощью RaphaelJS. Пользователь может загружать информационные страницы в другой div 'info' из этой карты SVG. Страницы загружаются с аналогичной функцией, которая дополнительно изменяет #хэш и запускает changeTopic(), чтобы изменить доску объявлений, чтобы люди могли обсуждать каждую тему.
Форма PHP принимает обычную заполненную информацию, а также скрытый «идентификатор страницы», который устанавливается текущей страницей, которую просматривает пользователь, и отправляет ее в базу данных. Различные сообщения сортируются по этому идентификатору страницы, поэтому функция changeTopic() выводит только правильные сообщения: gettopic.php?t=topic('pageid').
После отправки формы я бы хотел, чтобы обновлялась только часть сообщений, а форма очищалась. На данный момент это либо полное обновление страницы (пользователь теряет свою позицию на карте SVG), либо частичное обновление, когда я теряю форму (вместо этого получаю пустое место) и эта странная информационная страница отсутствует.
ajax
для этого - person k102   schedule 16.08.2011