Загрузка динамических страниц php и mysql без обновления - AJAX - PullRequest
2 голосов
/ 13 февраля 2012

В последние несколько дней я брожу по сети, чтобы найти сценарий, в котором были бы элементы, которые я желал бы получить. Лучшее, таким образом, это http://www.queness.com/post/328/a-simple-ajax-driven-website-with-jqueryphp,, но есть много проблем, где мне нужно лучше решение:

  • Мне не нужны хэштеги: мне нужны все ссылки для загрузки страниц, например папки (www.site.com/first/site/). Это работает волшебным образом на github (нажмите здесь https://github.com/spjoe/deluge-yarss-plugin, и нажмите на случайный файл и вернитесь назад, просматривая адресную строку). Если бы кто-то знал, что или как они делают, это было бы действительно круто.

  • Мне нужно динамическое содержимое: приведенный выше скрипт загружает только «дела» из функции переключателя, в то время как мне нужен php для проверки URL-адреса и поиска файла в базе данных mysql и вывода содержимого из нужных таблиц на основе URL-адреса. , если он найден в базе данных (если я указываю ссылку на site.com/harvey, php должен найти Харви в базе данных и показать, например, свой телефон, адрес и другие данные, хотя это не должно быть предварительно загружено, а запрашивается только по клику из-за проблем с полосой пропускания).

  • История: мне бы хотелось иметь опцию, при которой движения вперед и назад на сайте будут работать безупречно и с анимацией, которая работает при нажатии на ссылки ..

  • Рабочие ссылки внутри изменяемого элемента div: поскольку существует проблема с некоторыми сценариями, которые не меняют содержимое, если ссылка находится внутри него (например, первое поле содержимого включает в себя навигацию, которая должна быть заменена другой навигацией в вторая коробка), опять же, это работает очень хорошо с GitHub ..

Надеюсь, вы дадите мне несколько ссылок или даже больше помощи с кодом ..

Ответы [ 2 ]

1 голос
/ 13 февраля 2012

Я думаю, что скрипт, который вы ищете, это pjax , он имеет именно все функции, которые вы хотите. Вы можете найти его на github: https://github.com/defunkt/jquery-pjax/tree/heroku

EDIT

Вы можете использовать его с любым языком на стороне сервера. Например,

<script src="jquery.js"></script>
<script src="jquery.cookie.js"></script>

<script src="jquery.pjax.js"></script>
<script type="text/javascript">
    $(function(){
      $('nav a').pjax('#content')
    })
</script>

в голове вашего сайта,

<nav>
  <a href="otherContent1.php" >click me for other content</a>
  <a href="otherContent2.php" >click me for even more additional content</a>
</nav>
<section id="content">
  <h1>Original Content</h2>
  <p>
    this will be replaced by pjax with the content's of <a href="otherContent1.php">otherContent1.php</a> or <a href="otherContent2.php">otherContent2.php</a> 
  </p>
</section>

в вашем основном шаблоне и измените ваш php-код так, чтобы он искал заголовок HTTP_X_PJAX. Если он присутствует (см. xhr.setRequestHeader('X-PJAX', 'true')), визуализируйте только ту часть, которая должна заменить содержимое <section id="content">, иначе - всю страницу. Тогда Pjax достаточно умен, чтобы, если он работает, он заменял только содержимое <section id="content">, а если он не работал, у вас все еще были бы обычные ссылки. pjax даже позаботится о Google Analytics, если вы используете его, поэтому ваше отслеживание все еще работает.

EDIT2: пример

Хорошо, вот вам примерная страница php. Имейте в виду, что я не проверил это, я просто быстро и грязно написал здесь о переполнении стека, чтобы показать, как вы могли бы решить эту проблему. Этот код не проверен и, конечно, не готов к производству . Но в качестве примера вы можете сделать что-то вроде этого (файл должен называться index.php):

<?php
$render_template=true;
if ($_SERVER["HTTP_X_PJAX"])
{
    $render_template=false;
}
?>

<?php
if ($render_template) {
?>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Testing Pjax</title>
        <script src="jquery.js"></script>
        <script src="jquery.cookie.js"></script>

        <script src="jquery.pjax.js"></script>
        <script type="text/javascript">
            $(function(){
              $('nav a').pjax('#content')
            })
        </script>
    </head>
    <body>
        Date in template: <?php echo $today = date("D M j G:i:s T Y"); ?>
        <nav>
            <a href="index.php?content=1" >click me for other content</a>
            <a href="index.php?content=2" >click me for even more additional content</a>
        </nav>
        <section id="content">
<?php 
}
?>
<?php
if ($_Get["content"]==1) 
{
?>

            <h1>Content=1</h1>
            Date in content: <?php echo $today = date("D M j G:i:s T Y"); ?>
            <p>
                this will be replaced by pjax with the content's of <a href="index.php?content=1">index.php?content=1</a> or <a href="index.php?content=2">index.php?content=2</a> 
            </p>
<?php 
} else {
?>
            <h1>Content 2=2</h1>
            Date in content: <?php echo $today = date("D M j G:i:s T Y"); ?>
            <p>
                this will be replaced by pjax with the content's of <a href="index.php?content=1">index.php?content=1</a> or <a href="index.php?content=2">index.php?content=2</a> 
            </p>
<?php 
}
?>
<?php
if ($render_template) {
?>
        </section>
    </body>
</html>
<?php 
}
?>
0 голосов
/ 13 февраля 2012

Если вы хотите, чтобы URL отображал «правильный» URL-адрес при отправке запроса на страницу, вы можете использовать PJAX , он изменяет историю с pushState, но не работает при проверке ie6-ie9out CanIUse: History для проблем совместимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...