Как подгрузить локальный файл через ajax без интернета и сервера?
Но надо чтобы файл подгрузился именно локально. Поставить локальный сервер или подтягивать из интернета не вариант. Надо чтобы верстку можно было взять с собой на флешке и продемонстрировать на компьютере где нет интернета, локального сервера, прав администратора. Допустим, я пишу приложения на angular2 + bootstrap 4, использую предпроцессоры, gulp’ы всякие, а backend тяну только через api. Ок. Все понимаю, но и велосипеды пишу.
Но тут просто html+jquery. Надо чтобы верстку демонстрировал совершенно другой человек (любой) и только со флешки.
Отслеживать
3,301 4 4 золотых знака 29 29 серебряных знаков 53 53 бронзовых знака
задан 20 окт 2016 в 6:31
Жалгас Ажибаев Жалгас Ажибаев
300 3 3 серебряных знака 17 17 бронзовых знаков
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
XMLHttpRequest работает только с http , data , https .
Хром ещё позволяет chrome , chrome-extension , chrome-extension-resource , что понятно, но не помогает, ибо специфично.
Вам поможет миниатюрный сервер типа портативного XAMPP , запускаемого Bash-скриптиком. Или батником, если винда.
Если и это невозможно, то слейте всё в один файл, декорируйте API jQuery на перехват локальных путей и возврат их содержимого как бы загруженного.
Отслеживать
ответ дан 20 окт 2016 в 7:03
user207618 user207618
Насколько мне известно, этого нельзя сделать. AJAX подразумевает общение через http-протокол. Могу вам посоветовать визуально имитировать работу AJAX-запроса — показывать скрытый на странице блок при нужном событии.
Отслеживать
ответ дан 20 окт 2016 в 6:41
Sasha Omelchenko Sasha Omelchenko
12.8k 4 4 золотых знака 32 32 серебряных знака 62 62 бронзовых знака
Запустить локальный сервер проще, чем вы думаете. Очень многие веб-сервера могут быть запущены прямо с флешки в один клик. Надо просто их прямо на эту самую флешку установить.
Для работы без прав администратора надо всего-навсего слушать адрес 127.0.0.1 (он же localhost) — этот адрес обычно не закрыт брандмауэром. И любой порт больше 1024 (порт 80 может быть занят Скайпом или стандартным IIS).
Как минимум, на флешку можно поставить Apache Server, nginx и IIS Express. Также простейший локальный сервер можно написать на NodeJs
На ту же самую флешку можно записать любой браузер, чтобы не гадать что будет на «том компьютере».
Если вам нужны изкоробочные решения — посмотрите открытый проект Electron.
Отслеживать
ответ дан 20 окт 2016 в 7:12
Pavel Mayorov Pavel Mayorov
58.3k 7 7 золотых знаков 72 72 серебряных знака 146 146 бронзовых знаков
- javascript
- jquery
- ajax
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.8.3130
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
.load()
.load( url [, data ] [, complete ] ) Возвращает: jQuery
Описание: Загрузка данных с сервере и размещение полученного HTML в указанный элемент.
Добавлен в версии: 1.0 .load( url [, data ] [, complete ] )
url
Строка содержащая URL-адрес куда будет отправлен запрос.
data
Плоский объект или строка, которая будет отправлена на сервер с запросом.
complete
Тип: Function( String responseText, String textStatus, jqXHR jqXHR )
Функция, которая будет вызвана когда запрос будет выполнен.
Примечание: обработчик события окончания загрузки также называется .load() . jQuery определяет какой именно метод вызван, на основании того какие аргументы передаются в метод.
Этот метод самый простой способ получить данные с сервера. Он примерно эквивалентен коде $.get(url, data, success) , за исключеничем того что этот метод а не глобальная функция и неявный обработчик обратного вызова. Когда возвращается успешный ответ (т.е. когда значение textStatus равно «success» или «notmodified»), .load() устанавливает HTML содержимое в указанный элемент из возвращенных данных. Это означает, что в большинстве случаев, использование этого метода будет выглядеть следующим образом:
$( "#result" ).load( "ajax/test.html" );
Если не будет найден элемент соотвествующий заданному селектору, то, в этом случае, Ajax запрос не будет отправлен.
Функция обратного вызова
Если функция «complete» задана, то она выполняется после обработки и вставки HTML. Эта функция будет вызвана для каждого элемента в коллекции jQuery и this внутри нее будет указывать на DOM элемент.
$( "#result" ).load( "ajax/test.html", function()alert( "Load was performed." );>);
В этих примерах выше, если текущий документ не содержит элемента с ID равным "result," то метод .load() не выполнится.
Метод запроса
Метод POST будет исползован если в метод .load() передан объект, иначе будет использован GET.
Загрузка фрагмента страницы
Метод .load() , в отличие от $.get() , позволяет указать часть удаленного документа для вставки. Это доступно при помощи специального синтаксиса в параметре url . Если один или несколько символов пробела включены в строку, то первое слово, после первого пробела, будет предполагать jQuery селектор, который определит какая часть будет вставлена.
Мы можем изменить код из примера выше, так чтобы использовалась только часть полученного документа:
$( "#result" ).load( "ajax/test.html #container" );
Когда этот методы выполняется, извлекается содержимое ajax/test.html , но затем jQuery разбирает полученный документ и ищет элемент с ID равным container . Этот элемент, со всем своим содержимым, будет вставлен в элемент с ID равным result и остальная часть загруженного документа будет проигнорирована.
jQuery используется свойство браузера .innerHTML , чтобы проанализировать полученный документ и вставить его в текущий документ. Во время этого процесс, браузре часто отфильтровывает такие элементы из документа как: , или . В результате, элемент полученный при помощи метода .load() может быть не таким же, как если получить этот документ в браузере напрямую.
Выполнения скриптов
Когда вызван .load() при помощи URL без выражения селектора, содержание передается в .html() до удаления скриптов. Это выполняется блоки скриптов, до их удаления. Если .load() вызван с выражением селектора в URL, то скрипты скрипты будут удалены до обновления DOM и поэтому не будут выполнены. Пример для обоих случае приведен ниже:
Здесь, любой JavaScript загруженный в #a как часть документа будет успешно выполнен.
$( "#a" ).load( "article.html" );
В следующем случае, блоки скрипта перед вставкой в #b будут удалены и не будут выполнены:
$( "#b" ).load( "article.html #target" );
Дополнительные примечания:
- Из-за ограничений безопасности браузера, большинство "Ajax" запросов подверждено политике того же происхождения, запросы не могут быть выполнены к другим доменам, поддоменам, порту или протоколу.
Что такое JQuery и для чего это нужно, плюсы и минусы | Boodet.online
04 Авг 2020 07:29
IT GIRL
12
Post Views: 1 379
Что такое JQuery и для чего это нужно, плюсы и минусы | Boodet.online Блог 2020-08-04 ru Что такое JQuery и для чего это нужно, плюсы и минусы | Boodet.online
286 104
Boodet Online +7 (499) 649 09 90 123022 , Москва , ул. Рочдельская, дом 15, строение 15
286 104
Boodet Online +7 499 649 09 90 123022 , Москва , ул. Рочдельская, дом 15, строение 15
Поделиться
Поделиться
JQuery: простыми словами
jQuery — это одна из самых популярных и расширяемых библиотек JavaScript. Ее используют Microsoft, Netflix, Google и IBM. Лучше всего применять jQuery для приложений или сайтов, которые не управляются данными. Это связано с основной особенностью библиотеки — отсутствие поддержки интерполяции переменных, манипуляции в DOM (а не в его содержимом). Что это значит? О том, что такое jQuery , как загрузить на сайт и что это даст — рассказывают специалисты Boodet.Online.
Из истории
Впервые jQuery представил Джон Ресиг в 2006 году. Продукт был заявлен как библиотека JavaScript для работы с DOM. Необходимость в ней возникла из-за проблем с совместимостью старых браузеров, например Internet Explorer. JQuery облегчила не только манипуляции с DOM, но и выполнение запросов AJAX, отображение анимации. Что было до jQuery ? Разработчики пользовались тремя основными библиотеками: Script.aculo.us, MooTools, Prototype. У всех трех были проблемы с кросс-браузерной совместимостью и синтаксисом. Новая библиотека стала логичным ответом на боли разработчиков. На ее основе выпускали новые фреймворки, плагины. Что с jQuery сейчас? Благодаря развитию API-интерфейсов, JavaScript вырос как язык. Сейчас он тоже умеет выбирать элементы DOM (с помощью API Selectors). Современные браузеры используют JS, что тоже сдвигает позиции jQuery. Несмотря на это, по данным исследования BuiltWith, библиотеку используют на 77% сайтов (всего исследовали 1 миллион сайтов).
Для чего это нужно?
- разработка приложений на AJAX;
- отладка кода;
- упрощение работы с DOM;
- обработка событий на сайте;
- анимация веб-страниц.
Как работает JQuery
Одна из основных особенностей библиотеки — возможность вызвать ее функцию в любом месте веб-страницы. Как только страница открывается — загружается jQuery . Затем сразу же добавляется глобальная функция, что обеспечивает стабильное выполнение сценариев в любом браузере. Проще говоря, пользователи сразу же загружают библиотеку, поэтому проблем с просмотром контента не возникает — вы можете быть уверены, что сайт будет отображаться именно так, как вы задумали, не будет зависеть от особенностей браузера.
Основная цель jQuery — упростить использование JavaScript. Это выражается в том, что много строчек кода JS можно заменить на метод, который, в свою очередь, можно вызвать всего одной строкой кода. Это значительно сокращает время на разработку страниц и отдельных фичей в приложении (например, анимации).
Как именно работает jQuery ? Что конкретно упрощает:
- вызов AJAX;
- манипуляции с DOM/HTML, CSS;
- создание анимации, эффектов (того же Hover на кнопках);
- работу с методами событий HTML;
- использование утилит.
Библиотека универсальная — кроме описанных задач, в ней есть готовые плагины, которые упрощают жизнь разработчиков.
То, как это работает, зависит от версии jQuery. Например, сжатую используют в производственной среде, а несжатую — для разработки. В сжатой нет переводов строки, лишних пробелов, функций, имен переменных — все это ускоряет и упрощает отладку страниц и приложений. Чтобы сослаться на сжатую версию, используют всего один тег —
Включить из сети доставки контента
Включение из CDN Google ускоряет загрузку страниц. Почему так происходит? Скорее всего, ваши пользователи уже не раз заходили на сайт Google, а значит, уже загрузили библиотеку jQuery . Когда они будут заходить на ваш сайт, браузер возьмет данные из кэша — это быстрее, чем снова загружать. Еще одно преимущество сетей доставки контента — множество серверов. То есть когда пользователь запрашивает файл у CDN, то получает его с ближайшего сервера — так быстрее:
jQuery AJAX загрузка файлов на сервер
Как загружать любые файлы, например, картинки на сервер с помощью AJAX и jQuery? Делается это довольно просто! И ниже мы все обстоятельно разберем. В те «древние» времена, когда еще не было jQuery, а может он был, но браузеры были не так наворочены, загрузка файла на сайт с помощью AJAX была делом муторным: через всякие костыли вроде iframe. Я то время не застал, да и кому это теперь интересно. А интересно теперь другое - что сохранение файлов на сайт делается очень просто. Даже не обладающий опытом и пониманием, того как работает AJAX, вебмастер, сможет быстро разобраться что-куда. А эта статья ему в помощь. Если подкрепить эти возможности функциями WordPress, то безопасная обработка и загрузка файлов на сервер становится совсем плёвым и даже интересным делом (пример с WordPress смотрите в конце статьи). Однако, как бы все просто не было, нужно заметить, что минимальный опыт работы с файлами и базовые знания в Javascript, jQuery и PHP все же необходимы! Минимум, нужно представлять как загружаются файлы на сервер, как в общих чертах работает AJAX и хоть немного надо уметь читать и понимать код. Описанный ниже метод довольно стабилен, и по сути опирается на Javascript объект new FormData() , базовая поддержка которого есть во всех браузерах. Для более понятного восприятия материала, он разделен на шаги. На этом все, полетели.
Оглавление:
- AJAX Загрузка файлов: общий пример
- Шаг 1. Данные из поля file
- Шаг 2. Создаем AJAX запрос (по клику)
- Шаг 3. Обрабатываем запрос: загружаем файлы на сервер
- AJAX Загрузка файлов: пример для WordPress
AJAX Загрузка файлов: общий пример
Начинается все с наличия на сайте input поля типа file . Нет необходимости, чтобы это поле было частью формы (тега ).
Таким образом, у нас есть HTML код с file полем и кнопкой «Загрузить файлы».

Шаг 1. Данные из поля file
Первым шагом, нужно получить данные загружаемых файлов.
При клике на file-поле, появляется окно выбора файлов, после выбора, данные о них сохраняются в input поле, а нам нужно их от туда «забрать». Для этого повесим на событие change JS функцию, которая будет сохранять имеющиеся данные file-поля в JS переменную files :
var files; // переменная. будет содержать данные файлов // заполняем переменную данными, при изменении значения поля file $('input[type=file]').on('change', function()< files = this.files; >);
Шаг 2. Создаем AJAX запрос (по клику)
Данные файлов у нас есть, теперь их нужно отправить через AJAX. Вешаем это событие на клик по кнопке «Загрузить файлы».
В момент клика создаем новый объект new formData() и добавляем в него данные из переменной files . С помощью formData() мы добьемся того, что отправляемые данные будут выглядеть, как если бы мы просто сабмитили форму в браузере.
Далее, из имеющихся данных формы создаем нестандартный AJAX запрос, в котором передаем файлы в стандартном для сервера формате: $_FILES .
Чтобы такой запрос состоялся, в jQuery нужно указать дополнительные AJAX параметры, поэтому привычная функция $.post() не подходит и мы используем более гибкий аналог: $.ajax() .
Два важных дополнительных параметра нужно установить в false:
processData Отключает обработку передаваемых данных. По умолчанию, например, для GET запросов jQuery собирает данные в строку запроса и добавляет эту строку в конец URL. Для POST данных делает другие преобразования. Нам любые изменения исходных данных будут мешать, поэтому отключаем эту опцию. contentType Отключает установку заголовка типа запроса. Дефолтная установка jQuery равна "application/x-www-form-urlencoded . Такой заголовок не предусматривает отправку файлов. Если установить этот параметр в "multipart/form-data" , PHP все равно не сможет распознать передаваемые данные и выведет предупреждение «Missing boundary in multipart/form-data». В общем, проще всего отключить эту опция, тогда все работает!
// обработка и отправка AJAX запроса при клике на кнопку upload_files $('.upload_files').on( 'click', function( event ) < event.stopPropagation(); // остановка всех текущих JS событий event.preventDefault(); // остановка дефолтного события для текущего элемента - клик для тега // ничего не делаем если files пустой if( typeof files == 'undefined' ) return; // создадим объект данных формы var data = new FormData(); // заполняем объект данных файлами в подходящем для отправки формате $.each( files, function( key, value )< data.append( key, value ); >); // добавим переменную для идентификации запроса data.append( 'my_file_upload', 1 ); // AJAX запрос $.ajax(< url : './submit.php', type : 'POST', // важно! data : data, cache : false, dataType : 'json', // отключаем обработку передаваемых данных, пусть передаются как есть processData : false, // отключаем установку заголовка типа запроса. Так jQuery скажет серверу что это строковой запрос contentType : false, // функция успешного ответа сервера success : function( respond, status, jqXHR )< // ОК - файлы загружены if( typeof respond.error === 'undefined' )< // выведем пути загруженных файлов в блок '.ajax-reply' var files_path = respond.files; var html = ''; $.each( files_path, function( key, val )< html += val +'
'; > ) $('.ajax-reply').html( html ); > // ошибка else < console.log('ОШИБКА: ' + respond.data ); >>, // функция ошибки ответа сервера error: function( jqXHR, status, errorThrown ) < console.log( 'ОШИБКА AJAX запроса: ' + status, jqXHR ); >>); >);
Шаг 3. Обрабатываем запрос: загружаем файлы на сервер
Теперь последний шаг: нужно обработать отправленный запрос.
Чтобы было наглядно обработаем запрос без дополнительных проверок для файлов, т.е. просто сохраним полученные файлы в нужную папку. Хотя, для безопасности, отправляемые файлы обязательно нужно проверять, хотя бы расширение (тип) файла.
Создадим файл submit.php с таким кодом (предполагается что submit.php лежит в той же папке, где и файл, с которого отправляется AJAX запрос):
> $data = $done_files ? array('files' => $done_files ) : array('error' => 'Ошибка загрузки файлов.'); die( json_encode( $data ) ); >
Важно! Этот код только показывает как получать и сохранять файлы. В действительности, вам нужно проверить форматы принимаемых файлов, их размер, транслитерировать кириллические названия и возможно делать какие-то еще проверки.
Чтобы не собирать по частям вышеописанный код загрузки, предлагаю его скачать.
![]()
Полный, готовый к работе код из этой статьи.
Скачано: 5614, размер: 3.2 KB
Скопируйте содержимое архива на ваш php сервер, зайдите в главную паку (в браузере) и попробуйте загрузить файлы. Так, вы «в живую» увидите что и как работает.
- AJAX в WordPress
- Как загружается ядро WordPress
AJAX Загрузка файлов: пример для WordPress
Для WordPress обрабатывать AJAX запрос в разы проще, потому что есть готовые функции, например media_handle_upload().
Первый и второй шаг аналогичные, а в третьем шаге будем использовать встроенную функцию, которая добавит файл в медиатеку и привяжет его к текущему посту.
Чтобы код ниже начал работать, его нужно добавить в файл темы functions.php . Далее, создать страницу с ярлыком ajax_file_upload и зайти на эту страницу. В контенте вы увидите форму для добавления файла. Выбираете файлы и проверяете все ли загрузилось.

Это полноценный пример того, как безопасно загрузить файлы на сервер в среде WordPress.
post_name !== 'ajax_file_upload' ) return $text; return $text .= ' '; > // JS код function ajax_file_upload_jscode() < ?> // обработчик AJAX запроса function ajax_file_upload_callback() < check_ajax_referer( 'uplfile', 'nonce' ); // защита if( empty($_FILES) ) wp_send_json_error( 'Файлов нет. ' ); $post_id = (int) $_POST['post_id']; // ограничим размер загружаемой картинки $sizedata = getimagesize( $_FILES['upfile']['tmp_name'] ); $max_size = 2000; if( $sizedata[0]/*width*/ >$max_size || $sizedata[1]/*height*/ > $max_size ) wp_send_json_error( __('Картинка не может быть больше чем '. $max_size .'px в ширину или высоту. ','km') ); // обрабатываем загрузку файла require_once ABSPATH . 'wp-admin/includes/image.php'; require_once ABSPATH . 'wp-admin/includes/file.php'; require_once ABSPATH . 'wp-admin/includes/media.php'; // фильтр допустимых типов файлов - разрешим только картинки add_filter( 'upload_mimes', function( $mimes ) < return [ 'jpg|jpeg|jpe' =>'image/jpeg', 'gif' => 'image/gif', 'png' => 'image/png', ]; > ); $uploaded_imgs = array(); foreach( $_FILES as $file_id => $data )< $attach_id = media_handle_upload( $file_id, $post_id ); // ошибка if( is_wp_error( $attach_id ) ) $uploaded_imgs[] = 'Ошибка загрузки файла `'. $data['name'] .'`: '. $attach_id->get_error_message(); else $uploaded_imgs[] = wp_get_attachment_url( $attach_id ); > wp_send_json_success( $uploaded_imgs ); >
До этого из: AJAX
- SHORTINIT константа: WordPress среда с минимальной нагрузкой
- Ajax в WordPress
- Динамический архив блога с использованием jQuery (Ajax)