jQuery - создание динамического загрузчика контента с помощью $ .get () - PullRequest
0 голосов
/ 19 марта 2010

(привет, доктор. Ник) :) Итак, я вчера отправил вопрос о плагине загрузчика контента для jQuery, который, как мне показалось, я бы использовал, но не заставил его работать.

jQuery - может помочь небольшая помощь с загрузчиком контента

Хотя сейчас это работает, я вижу в этом некоторые недостатки. Для этого требуется куча файлов, в которых находится содержимое. Так как код, по сути, выбирает URL-адрес в ссылке href и ищет в этом файле div с именем #content

Что я действительно хотел бы сделать, так это собрать все эти файлы в один файл и присвоить каждому div / контейнеру свой уникальный идентификатор и просто взять содержимое из них. Так что мне не нужно так много отдельных файлов, лежащих вокруг.

Ник Крейвер подумал, что я должен использовать $.get() вместо этого, так как он получил обратный вызов. Но я не настолько силен в JS вообще .. И я даже не знаю, что это значит. Я в основном привык к Visual Basic и передаче аргументов, хранению в текстовых файлах и т. Д. Что на самом деле не подходит для этой цели.

Так каков "нормальный" способ делать такие вещи? Я уверен, что я не единственный, кто задумался об этом, верно? Я в основном хочу получить контент из одного php-файла, который содержит много div с уникальными идентификаторами. И без особых хлопот исчезните существующий контент на моей главной странице, возьмите содержимое из другого файла и перенесите его на мою главную страницу.

1 Ответ

1 голос
/ 19 марта 2010

Попробуйте этот маленький автономный пример

<?php
if ( isset($_POST['contentId']) ) {
  // a contentId parameter has been sent
  // "we" know these ids:
  $contents = array(
    'a'=>'Mary had a little lamb',
    'b'=>'whose fleece was white as snow',
    'c'=>'And everywhere that Mary went',
    'd'=>'the lamb was sure to go'
  );
  // if we know the contentId
  if ( isset($contents[$_POST['contentId']]) ) {
    // send back the data associated with the contentId
    echo $contents[$_POST['contentId']];
  }
  else {
    echo 'unknown contentID';
  }
  die;
}

// if no contentId parameter has been sent at all, send the html document
?>
<html>
  <head>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    <script type="text/javascript">
      function foo(contentID) {
        $('#container').hide('fast', function() {
          $('#container').load('?', {'contentId':contentID}, function() {
            $('#container').show('normal');
          });
        });    
      }
    </script>
  </head>
  <body>
    <fieldset>
      <button onclick="foo('a')">load content A</button>
      <button onclick="foo('b')">load content B</button>
      <button onclick="foo('c')">load content C</button>
      <button onclick="foo('d')">load content D</button>
     </fieldset>
    <div id="container">Hello.</div>
  </body>
</html>

«Важная» часть заключается в том, что он передает объект {'contentId':contentID} в .load (), то есть запрос будет содержать (post) параметр contentId = что-то. PHP-часть скрипта проверяет, установлен ли такой параметр или нет с помощью isset (). Если есть, он проверяет, есть ли у него данные, связанные с этим contentId. В этом примере для этого используется (статический) массив, но это может быть что угодно.

Это имеет некоторые недостатки. Например. браузер не кэширует содержимое. Каждый раз, когда нажимается кнопка, данные должны отправляться туда и обратно между сервером и клиентом. Но вы можете использовать что-то вроде mod \ rewrite или подобное, чтобы позволить вашему php-скрипту реагировать на URL-адреса, такие как http://someserver/getContents/contentIdA, http://someserver/getContents/contentIdB, http://someserver/getContents/contentIdC и т. Д.

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