load() и getscript() не всегда работают
На моей странице index.php я использую jquery load() для загрузки других страниц в div "bodycontent". Это прекрасно работает и денди. Я отключаю обычные ссылки и должен сделать href именем страницы без php, и снова включу php, когда произойдет load (). Одна из моих страниц, которую я загружаю в div, у меня всплывают диалоговые окна с ссылками.
Когда вы изначально заходите на страницу, это работает нормально, но если вы вообще отказываетесь, нажимая "продукты" или любую другую ссылку на странице, а затем возвращаетесь к "дому" и нажимаете ссылку "читать дальше", диалоговые окна не будут отображаться снова. Вы должны обновить, и тогда он будет работать, пока вы не нажмете ссылку снова. Кроме того, это хорошо работает в моем IE 9, версия 9.8.8, но старый IE на работе (например, 8), и по крайней мере еще один человек хром диалоговое окно не появится вообще. На моей работе также есть IE9, с которыми это просто не сработает, несмотря на то, что я удаляю временные интернет-файлы и т. Д. На моем компьютере он отлично работает при новых загрузках Firefox, Chrome и IE, поэтому мне также интересно, если мой метод обратно совместим и кросс-браузер, и если нет, что я могу сделать, чтобы сделать это так. Я также использую скрипт get в функции с загрузкой, чтобы получить jquery, jquery ui и мой файл javascript для диалога.
Я также смотрел на такие вещи, как ajaxcomplete и тому подобное, но, будучи моим изначально, я не совсем уверен, что делать.
Главная страница моего основного сайта, загружающая home.php изначально (новости, т. Д.)
dialog.js:
$(document).ready(function() {
$('#dialogbox').dialog({
autoOpen: false,
title: 'Loading title...',
modal: true,
width: 500,
height: 400
});
});
function readMore(id,title,cat,desc,post,auth) {
//alert(id +","+ title +","+ cat +","+ desc +","+ post +","+ auth);
var $dialog = $('#dialogbox').html('Category: '+ cat +'<br/>'+ desc +'<br/>---------------------------------<br/>Posted by: '+ auth +'<br/>' + post);
$dialog.dialog('open');
$dialog.dialog("option","title",title);
}
Как я тянуть к функции readMore:
<?php
require('config/dbconfig.php');
$query = "SELECT * FROM news ORDER BY id DESC LIMIT 4";
if ($stmt = $mysqli->prepare($query)) {
/* execute statement */
$stmt->execute();
/* bind result variables */
$stmt->bind_result($idn, $titlen, $categoryn, $descn, $postdaten, $authorn);
/* fetch values */
while ($stmt->fetch()) {
//echo 'id: '. $id .' title: '. $title;
echo "<table border='0'>";
$shortDescLengthn = strlen($descn);
if ($shortDescLengthn > 106) {
$sDCutn = 106 - $shortDescLengthn;
$shortDescn = substr($descn, 0, $sDCutn);
} else {
$shortDescn = $descn;
}
echo "<h1>$titlen</h1>";
echo "<tr><td>$shortDescn...</td></tr>";
echo '<tr><td><a href="javascript:void(0);" onclick="'
. 'readMore(' . $idn . ',' . htmlspecialchars(json_encode($titlen)) . ','
. htmlspecialchars(json_encode($categoryn)) . ','
. htmlspecialchars(json_encode($descn)) . ',' . htmlspecialchars(json_encode($postdaten)) . ','
. htmlspecialchars(json_encode($authorn)) . ')">Read More</a></td></tr>';
echo "<tr><td>Written by: $authorn</td></tr>";
echo '<tr><td><img src="images/hardcore-games-newsbar-border.png" width="468px" /></td></tr>';
}
echo "</table><br />";
/* close statement */
$stmt->close();
}
/* close connection */
$mysqli->close();
?>
Итак, еще раз, в основном мне нужно понять, почему это не работает после того, как я нажму на ссылку, и как она может быть более совместимой с браузерами и обратно.
1 ответ
Все, что мне нужно было сделать, это добавить:
$('#bodycontent').empty();
до загрузки (), и это работает на каждом компьютере, который я пробовал до сих пор. Я предполагаю, что div нужно очистить перед загрузкой в него нового html, поэтому, возвращаясь назад, он сохранял js и тому подобное от getscript и путаницы. Также сохранил только один js-файл, который требовался только для home.php для загрузки, и поместил все остальное на страницу индекса (как и должно быть в любом случае).