|
|
|
| Пишу двиг для сайта с использованием пхп+js(jQuery+ajax).
Общий упрощённый вид страницы будет таким
...
<body>
<a>Ссылка 1</a>
<a>Ссылка 2</a>
<a>Ссылка 3</a>
<div class="content">Сюда загружается контент</div>
</body>
...
На сайте при переходе по ссылкам информация должна подгружаться в определённый див, т.е без полного обновления страницы.
К примеру если перейти по первой ссылке, то загрузится инфа из файла 1.php.
Но получается, что содержимое изменилось, а адрес нет, т.к. данные были подгружены асинхронно. Адрес в строке браузера, конечно можно изменить с помощью того же js, чтобы получилось site.ru/1.php но если перейти по этому адресу из адресной строки, а не через ссылки на сайте, то пользователю выведется "голый" контент и возможно вылетят какие-то ошибки, т.к. файл 1.пхп содержит только именно саму информацию, а шапка, ноги, и всевозможные менюшки сайта находятся на главной и редко обновляются/изменяются во время переходов по сайту.
К, возможно, кто-то догадался я хочу создать такой же переход и загрузку страниц как на "Вконтакте".
Помогите решить данную проблему пожалуйста. Тему создал в форуме про пхп так как мне кажется тут вопрос касается его больше, если я ошибка администрация, перенесите пожалуйста в нужный раздел. | |
|
|
|
|
|
|
|
для: (Sandr)
(16.08.2011 в 18:08)
| | Проверяйте в скрипте как он был вызван, через ajax или нет
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
// Если к нам идёт Ajax запрос, то ловим его
echo 'Это ajax запрос!';
exit;
}
//Если это не ajax запрос
echo 'Это не ajax запрос!';
|
и в зависимости от этого подключайте или не подключайте хедер и футер. | |
|
|
|
|
|
|
|
для: c-basso
(16.08.2011 в 18:16)
| | Хм.. интересно) Даж не знал, что можно так определить) А есть ли какие-нибудь ещё способы, это для подстраховки так сказать :) | |
|
|
|
|
|
|
|
для: (Sandr)
(16.08.2011 в 18:20)
| | врядли это будет везде работать, лучше отправлять данные аяксом через пост и в файле проверять наполнен ли пост массив, тоже не супер но стабильнее. | |
|
|
|
|
|
|
|
для: (Sandr)
(16.08.2011 в 18:08)
| | c-basso, sl1p, спасибо за помощь)) | |
|
|
|
|
|
|
|
для: (Sandr)
(16.08.2011 в 21:11)
| | Вот, только народ мне подсказал, как решить одну задачу, так сразу появилась другая((
Вот какой сейчас у меня вид ссылки:
<a href="/reg.php" onclick="loadContent('.mainContent', 'reg.php')">Регистрация</a><br>
А это функция на на js.
function loadContent(contentElem, url) {
$.ajax({
type: "POST",
url: url,
data: {ajax: 'ajax'},
success: function(html) {
$(contentElem).html(html);
}
});
return false;
}
И всё бы было хорошо, если бы не одно но. Ссылки не загружаются асинхронно, я перехожу по ним как по обычным ссылкам, а это не то что мне нужно. Можно, конечно, убрать href="/reg.php" и тогда всё грузится асинхронно, но ссылки не существует ДЛЯ ПОИСКОВИКА! Что делать? Подскажите, с этим вообще в тупик зашёл. Нужно сделать так, чтобы для пользователей было всё асинхронно и поисковик спокойно по сайту лазал. Кто подскажет разумное решение, тому немного могу на веб мани подкинуть деньжат. Ребят, помогите, очень надо.. | |
|
|
|
|
|
|
|
для: (Sandr)
(17.08.2011 в 23:14)
| | Вообще-то должно и так работать. Попробуйте временно оставить в load() только return false;, у вас по прежнему осуществляется переход по ссылке? Попробуйте также вместо
onclick="loadContent('.mainContent', 'reg.php')"
|
написать
onclick="loadContent('.mainContent', 'reg.php'); return false;"
|
PS Под новые вопросы лучше заводить новые темы. | |
|
|
|
|
|
|
|
для: cheops
(18.08.2011 в 00:17)
| | Хм.. добавил в онклике return false; как вы и написали и всё норм) Только вот не пойму для чего она там?
П.С. Давайте wmr кошелёк)) | |
|
|
|
|
|
|
|
для: (Sandr)
(18.08.2011 в 11:14)
| | return false как раз предотвращает переход по ссылке (вообще должен и внутри функции срабатывать, однако, не все браузеры подцепляют возвращаемый false).
PS Если хотите, вы можете перечислить средства в наш Благотворительный фонд, номера кошельков указаны тут http://www.softtime.info/consultation.payway.php. | |
|
|
|
|
|
|
|
для: cheops
(18.08.2011 в 11:34)
| | Извиняюсь, но вы ведь не Кузнецов Максим Валерьевич, а Симдянов Игорь Вячеславович на сколько я знаю. Там указаны реквизиты Кузнецова Максима Валерьевича, но помогал мне не он сейчас, а вы)
(никого не хочу обидеть, если что) | |
|
|
|
|
|
|
|
для: (Sandr)
(18.08.2011 в 12:02)
| | Мы оба являемся основателями студии, пишем совместно книги, финансами заведует МВ. Собственно, этот фонд не для нашего личного пользования (мне лично средств не нужно, я рад что у вас разрешилась проблема, возникнет еще - будем пытаться её решать :). Тут на форуме я могу без вложения средств вам помочь, в реальной жизни так зачастую не получается, приходится доставать деньги из своего кармана. Собственно, этот фонд мы организовали, чтобы можно было чаще помогать другим в off-line, деньги от ответов на платные вопросы (когда вопрос объемный и на форуме на него нет возможности ответить) в центре тоже поступают в этот фонд. | |
|
|
|
|
|
|
|
для: cheops
(18.08.2011 в 12:20)
| | Теперь ясно) | |
|
|
|
|
|
|
|
для: (Sandr)
(17.08.2011 в 23:14)
| | Я конечно не профессионал, но мне кажется, раз уж вы используете jQuery такой код будет правильнее:
Так например оформляются ссылки:
<ul class="menu">
<li><a href="reg.php">Регистрация</a></li>
<li><a href="chto-to.php">Что-то еще</a></li>
</ul>
|
А такой будет яваскрипт:
$('ul.menu li a').click(function(){
var url = $(this).attr('href');
var contentElem = '#mainContent';
loadContent(contentElem, url)
return false;
});
|
Это чтобы не писать в html onclick="loadContent('.mainContent', 'reg.php')" и таким образом отделить мухи от котлет, html от js | |
|
|
|
|
|
|
|
для: c-basso
(18.08.2011 в 14:58)
| | Я тож начал подумывать о подобном) Но jQuery я стараюсь использовать в крайних случаях. Но всё же спасибо) | |
|
|
|