Очень часто возникает потребность в подключении каких-либо шаблонов или какого-либо контента из другого файла. К сожалению, не все могут воспользоваться функцией inlude в PH из-за ограниченности возможностей хостинга. Отсюда возникает потребность к обращению AJAX функций .load() и .get().

Свойства

.load() — Загрузка данных с сервера и размещение возвращаемого HTML в указанный элемент.
url
Типа: Строка
Строка, содержащая URL, к которому направляется запрос.
Данные

Тип: Объект или Строка
Простой объект или строка, которая отправляется на сервер с запросом.

Функция «выполнено»

Тип: Функция( Строка responseText, Строка textStatus, jqXHR jqXHR )
Функция обратного вызова, которая выполняется, когда запрос завершается

.get() — Загрузка данных с сервера, используя запрос HTTP GET.
url
Типа: Строка
Строка, содержащая URL, к которому направляется запрос.

Данные

Тип: Объект или Строка
Простой объект или строка, которая отправляется на сервер с запросом.

Функция «выполнено»

Тип: Функция( Строка responseText, Строка textStatus, jqXHR jqXHR )
Функция обратного вызова, которая выполняется, когда запрос завершается.

Тип данных

Тип: Строка
Тип данных, ожидаемых от сервера. По умолчанию: Intelligent Guess (XML, JSON, script или HTML).



Таким образом мы получаем почти одинаковые функции за исключением одного НО , который пришел с опытом. Если мы хотим подключить содержимое файла и не более того, например содержимое файла head.html, и поместить его в секцию , то обе функции дадут нам один и тот же результат. Но если нам надо дополнять содержимое секций(head, div), то есть если мы уже имеем какой-то контент, то тут функция .load() заменит полностью содержимое блока, а при любой попытки использовать функции JQUEY для дополнения, например получить текст и сделать html() + ..., то результатом будет вечное зацикливание дописанных функций.

Когда в то же время функция .get() работает с остальными функциями (.append(), .html()) уже разумно и не вызывает зацикливание. Но то же не стоит забывать, что по умолчанию .get() заменяет контент полностью, а если использовать в функции success() appen(), то код дополниться.


Пример

.load()

$('article').each(function () {
$(this).load("template/head.html"); // загрузит в страницу и заменит код блока article
});

.get()

$('article').each(function () {
$(this).get("template/head.html"); // загрузит в страницу и заменит код блока article
});

.load()

$('article').each(function (i, elem) {
$(this).load("template/head.html", function (data) {
$(elem).append(data);
}); // загрузит в страницу и дополнит код head, вызвав зацикливание break, continue не помогут
});

.get()

$('article').each(function (i, elem) {
$(this).get("template/head.html", function (data) {
$(elem).append(data);
}); // загрузит в страницу и дополнит код head
});



.load() — функция для обращение больше к PHP скриптам из HTML файла;
.get() — функция для общение между HTML файлами или для получения дополняемого контента файла.

Комментарии (13)


  1. rtdllnn
    28.03.2016 11:03

    Все это в документации описано.


    1. mepihin
      28.03.2016 11:04
      -3

      Я не уверен, что там описаны нюансы про зацикливание вывода контента и дополняемости данных. На официальном сайте я нашел описание функций и примеры, но вот конкретного описание пробоем использования не было.


      1. medved6216
        28.03.2016 19:33

        Юноша, Вы либо не уверены, либо Вы прочитали документацию по jQuery и решили писать статью.
        Если Вы не уверены, то не надо писать, то в чем не уверены. Если Вы позиционируете себя как "Разработчик инновационного программного обеспечения в сфере веб приложений и прикладного программного обеспечения под платформы: Windows, Linux и Android" (дословно из профиля), то извольте разбираться в направлениях о которых пишите.
        P.S. (для автора): Любую документацию нужно читать на официальном сайте, не советую читать "переведенку" на сомнительных ресурсах, в которых только и будет описание передаваемых данных и примеры.
        P.S. (для стариков): Последнее время молодежь активизировалась писать "ересь", как с этим бороться ?! ;)
        Еще вопросы:

        1. Зачем Вы используете include для html-файла, когда есть file_get_contents?
        2. Что это за хостер такой, где запрещен include?


  1. Ashot
    28.03.2016 11:21

    $('article').each(function (i, elem) {
      $(this).load("template/head.html", function (data) {
        $(elem).append(data);
      }); // загрузит в страницу и дополнит код head, вызвав зацикливание break, continue не помогут
    });

    А зачем в колбеке .load аппендить результат в тот же элемент? Метод load — это, скажем так, сахар для ajax-запросов: посылает запрос и результат(HTML) сразу вставляет в элемент, на котором он вызван(о чём в документации вполне доступно написано).


    по умолчанию .get() заменяет контент полностью

    Он ничего не заменяет — вся его работа заключается в отправке запроса и получении ответа.


    .load() — функция для обращение больше к PHP скриптам из HTML файла;
    .get() — функция для общение между HTML файлами или для получения дополняемого контента файла.

    Эти утверждения высосаны из пальца:
    .load — выше уже написал для чего он
    .get — получение данных ajaxом данных по get-запросу (а сам он в свою очередь является обёрткой над методом.ajax()`)
    В общем, подводные камни вы себе сами придумали, если честно.


    1. mepihin
      28.03.2016 11:33
      -1

      у меня была задача: получить содержимое из файла и дополнить head ими, то есть оставить что есть и добавить из файла.
      load — заменял все полностью, а на дополнение вызывал рекурсию


  1. M-A-X
    28.03.2016 11:42

    Это никакие не подводные камни.


    1. mepihin
      28.03.2016 11:42

      А что это тогда? Чтобы я знал на будущее и не делал таких ошибок


      1. M-A-X
        28.03.2016 11:58

        .load() — для тупого вставляния контента в какую-то область.
        .get() — более продвинутый, можно сделать что угодно, есть обработчик события, настройки

        Но я советую использовать .ajax() — вся мощь ajax в jquery.


  1. Zenitchik
    28.03.2016 11:58

    .load() — функция для обращение больше к PHP скриптам из HTML файла;
    .get() — функция для общение между HTML файлами или для получения дополняемого контента файла.

    Странный вывод. Я почему-то думал, что jQuery.ajax и все обёртки над ним служат для обмена данными с сервером. А откуда берётся ответ — генерится скриптом или из статического файла берётся — вопрос не актуальный.


  1. spmbt
    28.03.2016 13:12

    На мой взгляд, разбирать конкретные баги текущих версий jQuery — полезно, но их так надо и называть, и, как максимум, если есть время на разбор причин, писать багрепорты. Эта библиотека несколько раз переписывалась довольно глубоко с целью устранить системные ошибки и так будет далее. Над ней работают десятки человек. Поэтому в таких статьях самое полезное, что можем дать сообществу и получить — рассказать о конкретных багах.
    Что касается .ajax(), присоединяюсь к комментатору, который советует пользоваться общей функцией $.ajax(). Всё остальное — надстройки и побочные эффекты, которые потом будут затруднять искать вызовы AJAX в коде проекта.
    (А то, что $.ajax не эмулирует работу с файловой системой без сервера, мне лично давно вообще не нравилось, и приходилось делать нативные вызовы в случаях (весьма частых), когда при тестировании хочется заменить удалённый или локальный сервер файлами. В нативном вызове всё это начинало работать, когда чуть изменишь анализ возврата статуса, а в jQuery это, конечно, возможно, но надо копаться в реализации и что-то подправить в глубине её функции. В следующей версии либы это всё усложняется, и нет смысла следить и делать патчи, нативно всё намного проще.)


    1. psvg42
      28.03.2016 15:35

      А то, что $.ajax не эмулирует работу с файловой системой без сервера, мне лично давно вообще не нравилось…
      Это не задача $.ajax, поднять статический файловый http сервер дело 5 минут, например таже idea умеет это из коробки.


      1. spmbt
        02.04.2016 00:28

        Не у каждого же есть знания о том, как поднять сервер, и не всегда есть желание тратить время, чтобы посмотреть демо из архива. тогда эмуляция сервера помогает — отправить кому-то демо, не требующее сервера или хранить у себя версии проектов в архивах.


        1. Zenitchik
          02.04.2016 00:59

          Для $.ajax есть fixture
          Эта штука решает проблему эмуляции.