ПРИМЕЧАНИЕ. Это длинный вопрос. Я объяснил все «основы» сверху, а затем есть некоторая дополнительная (необязательная) информация, если вам это нужно.
Привет, ребята
Прошлой ночью это началось примерно в 9 вечера, когда я пытался реструктурировать свой код, чтобы сделать дизайнера более привлекательным для добавления нескольких битов. Я пытался исправить это до 2 утра, после чего я сдался. Вернулся к нему сегодня утром, все еще сбитый с толку.
Я буду честен с вами, я довольно плохой разработчик Javascript. С момента запуска этого проекта Javascript был совершенно новым для меня, и я только учусь по ходу дела. Поэтому, пожалуйста, прости меня, если моя структура кода действительно плохая (возможно, дайте пару советов о том, как ее улучшить?).
Итак, к проблеме: чтобы воспроизвести это, посетите http://furnace.howcode.com (это далеко не завершено). Эта проблема немного сбивает с толку, но я бы очень признателен за помощь.
- Итак, во втором столбце вы увидите три вкладки
- По умолчанию выбрана вкладка «Новейшие». Прокрутите вниз, и через Ajax будут динамически извлекаться еще 3 результата.
- Теперь нажмите на вкладку «Лучшие». Вы увидите все результаты, но упорядочены по рейтингу
- Прокрутите до нижней части «Лучшие оценки». Вы увидите возвращенные результаты SIX.
- Вот где все идет не так. Должны быть возвращены только еще три (всего 18 записей). Если вы внимательны, вы заметите два «блока» из 3-х.
- Первый блок - это вторая страница результатов на вкладке «Новейшие». Второй блок - это то, что я просто хочу вернуть .
Это имело смысл? Не бери в голову!
Так что я проверил это в Firebug. Происходит следующее: со страницы «Очистить» (первая загрузка ничего не делается) он вызывает ONE POST-запрос к http://furnace.howcode.com/code/loadmore.
Но каждый раз, когда вы загружаете новую вкладку, он делает ДОПОЛНИТЕЛЬНЫЙ POST-запрос каждый раз, когда обычно должен быть только ОДИН.
Так, вы можете мне помочь? Я действительно ценю это! В этот момент вы можете начать независимое расследование или прочитать дополнительную (дополнительную) информацию.
Спасибо!
Jack
Дополнительная информация (может быть неактуальной, но здесь для справки):
Это похоже на то, что есть какой-то код Javascript или что-то еще, что дублирует его каждый раз. Я подумал, что это может быть этот код, который я использую, чтобы определить, когда браузер прокручивается вниз:
var col = $('#col2');
col.scroll(function(){
if (col.outerHeight() == (col.get(0).scrollHeight - col.scrollTop()))
loadMore(1);
});
Итак, я подумал, что код остался позади, и поэтому каждый раз, когда вы прокручиваете # col2 (который содержит разные данные для каждой вкладки), он обнаруживает это и добавляет его для #newest. Итак, я сделал каждый щелчок вкладки, чтобы дать # col2 динамический класс - .newestcol, .featuredcol или .topratedcol. А потом я динамически изменил var col=$('.newestcol');
, чтобы он обнаруживал его только для каждой вкладки (что-то вроде ?!). Но эй, это ничего не сделало.
Еще одна полезная новость: вот PHP для http://furnace.howcode.com/code/loadmore:
$kind = $this->input->post('kind');
if ($kind == 1){ // kind is 1 - newest
$start = $this->input->post('currentpage');
$data['query'] = "SELECT code.id AS codeid, code.title AS codetitle, code.summary AS codesummary, code.author AS codeauthor, code.rating AS rating, code.date,
code_tags.*,
tags.*,
users.firstname AS authorname,
users.id AS authorid,
GROUP_CONCAT(tags.tag SEPARATOR ', ') AS taggroup
FROM code, code_tags, tags, users
WHERE users.id = code.author AND code_tags.code_id = code.id AND tags.id = code_tags.tag_id
GROUP BY code_id
ORDER BY date DESC
LIMIT $start, 15 ";
$this->load->view('code/ajaxlist',$data);
} elseif ($kind == 2) { // kind is 2 - featured
Так что мой код jQuery отправляет переменную kind. Если это 1, он выполняет запрос для Новейших и т. Д. И т. Д.
PHP-код для stop.howcode.com/code/ajaxlist:
<?php // Our query base
// SELECT * FROM code ORDER BY date DESC
$query = $this->db->query($query);
foreach($query->result() as $row) {
?>
<script type="text/javascript">
$('#title-<?php echo $row->codeid;?>').click(function() {
var form_data = {
id: <?php echo $row->codeid; ?>
};
$('#col3').fadeOut('slow', function() {
$.ajax({
url: "<?php echo site_url('code/viewajax');?>",
type: 'POST',
data: form_data,
success: function(msg) {
$('#col3').html(msg);
$('#col3').fadeIn('fast');
}
});
});
});
</script>
<div class="result">
<div class="resulttext">
<div id="title-<?php echo $row->codeid; ?>" class="title">
<?php echo anchor('#',$row->codetitle); ?>
</div>
<div class="summary">
<?php echo $row->codesummary; ?>
</div>
<!-- Now insert the 5-star rating system -->
<?php include($_SERVER['DOCUMENT_ROOT']."/fivestars/5star.php");?>
<div class="bottom">
<div class="author">
Submitted by <?php echo anchor('auth/profile/'.$row->authorid,''.$row->authorname);?>
</div>
<?php
// Now we need to take the GROUP_CONCATted tags and split them using the magic of PHP into seperate tags
$tagarray = explode(", ", $row->taggroup);
foreach ($tagarray as $tag) {
?>
<div class="tagbutton" href="#">
<span><?php echo $tag; ?></span>
</div>
<?php } ?>
</div>
</div>
</div>
<?php }
echo " ";?>
<script type="text/javascript">
var newpage = <?php echo $this->input->post('currentpage') + 15;?>;
</script>
Так что это все в PHP. Остальное вы сможете просматривать с помощью Firebug или путем просмотра исходного кода. Я поместил все биты Tab / click / Ajaxloading в тегах в самом низу. Есть комментарий, прежде чем все это начнется.
Большое спасибо за вашу помощь!