Ответы пользователя по тегу JavaScript
  • Можно ли сохранить файл полученный от веб сервера средствами js?

    copist
    @copist
    Empower people to give
    1. Отправь готовы файл пользователю по электронной почте
    2. Сделай реализацию слушателя событий на веб-сокетах и сообщай пользователю, когда сервер выдаст событие "файл готов".

    Ведь если делать как я придумал, то файл будет болтаться где то в папке веб сервера, доступен из вне для скачивания, и нужно писать какой то сборщик мусора на том же кроне.

    Генери длинный случайный URL. Удаляй по крону. Не вижу проблем.
    Ответ написан
  • На чем писать конструктор?

    copist
    @copist
    Empower people to give
    Дельный совет: посмотри как реализованы уже работающие современные конструкторы landing page
    https://www.google.ru/search?q=landing+page+online...

    Потыкайся, посмотри как они это визуально реализовали, подебажь запросы на сервер.
    Прикинь, что из этого надо на клиенте делать, а что - на сервере.

    Если ты делаешь LP под заказ, то тебе, может статься, тебе вполне хватит возможностей таких конструкторов.

    Моё предположение: весь конструктор - это JS, а на сервере весь шаблон и его настройки хранятся в NoSQL базе, например Mongo.

    Всё веселье начинается когда на странице попросят вывести грид из динамических данных, например, каталог товаров. Погугли в направлении BaaS (backend as service). Это может решить вопрос с хранением данных.
    Ответ написан
    Комментировать
  • Как сделать конструктор пиццы, т.е. выбираешь какие-то ингредиенты и они добавляются на основной картинке как бы слоями сверху?

    copist
    @copist
    Empower people to give
    У них используется много полупрозрачных изображений для отдельных ингредиентов.
    Вот, например, изображение для начинки "шампиньоны" 500600.ru/images/ingridients/shampiniony1.png
    Изображения накладываются друг на друга с помощью JS в объекте типа canvas.
    Вот так это реализовано в HTML: copi.st/LE8L

    Пример реализации: codepen.io/copist/pen/EVayRq
    Ответ написан
    1 комментарий
  • Как узнать, что за запрос?

    copist
    @copist
    Empower people to give
    У тебя закоментирована строка

    // var data = JSON.parse(request.responseText);

    Вот в этом request.responseText с сервера надо передавать, что именно там произошло. Например, в формате JSON можно вернуть имя файла, URL для просмотра файла, URL для его скачивания
    (формат ответа я придумал из головы - он полностью на твоё усмотрение)
    {
      "file": "text1.txt",
      "view_url": "http://domain.com/path/to/file/text1.txt",
      "download_url": "http://domain.com/path/to/file/text1.txt?download"
    }

    на стороне сервера на PHP такой ответ мог бы быть сформирован вот так:
    <?php
    /* что-то сделать с принятым файлом */
    
    /* выдать ответ через AJAX */
    echo json_encode(array(
        "file" => "text1.txt",
        "view_url" => "http://domain.com/path/to/file/text1.txt"
        "download_url" => "http://domain.com/path/to/file/text1.txt?download",
    ));


    Ещё можно воспользоваться замыканиями, как подсказал planarik :

    <script type="text/javascript">
    function loadFile(fileUrl, callback)
    {
        var request = new XMLHttpRequest();
    
        request.onload = function() {
            if (request.status >= 200 && request.status < 400) {
                // fileUrlбурётся через замыкание, а request.responseText из ответа сервера
                callback(fileUrl, request.responseText);
            } else {
                alert('Error');
                // We reached our target server, but it returned an error
            }
        };
    
        request.open('GET', fileUrl, true);
        request.send();
    }
    
    loadFile('1.txt', function(fileUrl, reponseText) {
        alert('Загружен файл :' + fileUrl);
        //   var data = JSON.parse(request.responseText);
    });  
    </script>
    Ответ написан
  • Что нужно первично выучить для джуниора по JS/Node?

    copist
    @copist
    Empower people to give
    Какие задачи нужно уметь выполнять на JS начинающему (для NodeJS разработчика надо то, что помечено "важно", включая операции над DOM)

    Для укрепления навыков backend разработки - многопользовательское приложение с сервером на Node и клиентском на JS (angular, durandal, aurelia, backbone), например, игру какую-нибудь, хотя бы шашки или морской бой.
    Ответ написан
    Комментировать
  • CodePen/JSFiddle альтернатива на своем сервере?

    copist
    @copist
    Empower people to give
    JSFiddle и Codepen используют онлайн редактор кода с подсветкой синтаксиса CodeMirror.
    Cloud9 используют Ace.

    Нужно приделать авторизацию, храненение кусков кода и отображение результата.
    База подойдёт NoSQL, а можно в файликах хранить
    Интерфейс можно написать на AngularJS + NodeJS + Meteor, а можно на PHP + jQuery собрать

    Репо CodeMirror https://github.com/codemirror/codemirror
    Репо Ace https://github.com/ajaxorg/ace

    Есть навороченный, но не такой красивый как Codepen проект JSBin https://github.com/jsbin/jsbin/

    А тебе зачем?
    Ответ написан
    4 комментария
  • Как сделать модальное окно перемещаемым и увеличиваемым/уменьшаемым?

    copist
    @copist
    Empower people to give
    Если бы можно было подключить jQueryUI, то

    перемещение https://jqueryui.com/draggable/
    резайз https://jqueryui.com/resizable/

    А увеличение на прокрутку мыши вешается через событие scroll
    www.w3schools.com/jquery/event_scroll.asp
    и реализуется через CSS zoom
    htmlbook.ru/css/zoom
    Ответ написан
  • Что делает эта функция JS?

    copist
    @copist
    Empower people to give
    Две неопределённые переменные sCap и cookie - без них предположение о работе функции очень приблизительные.

    Она проверяет есть ли поддержка cookie что ли...

    Нет, она читает из кук какое-то значение.

    Выполни в консоли бразера Google Chrome такую строку:
    console.log(document.cookie)

    На примере тостера, будет приблизительно вот такая строка:
    _gat=1; _ga=GA1.2.591983563.1439419107; _ym_visorc_24049246=w


    Твой скрипт ищет в такой строке подстроку от слова "что-тоCap=" до символа ";", затем найденное значение приводит к целому путём округления. Результат использует для логического сравнения.
    Я повторю: две неопределённые переменные sCap и cookie - без них предположение о работе функции очень приблизительные.

    Если она возвращает return то это как бы true а если ничего не возвращает то это false?


    Если ничего не возвращает, то это undefined. В логических операциях может быть приведена (временно пребразована) к булевскому значению false, но это всё же undefined.
    Ответ написан
  • Какие задачи нужно уметь выполнять на JS начинающему?

    copist
    @copist
    Empower people to give
    Какие задачи нужно уметь решать на чистом JS, перед тем как переходить к изучению библиотек и фреймворков?


    Кроме синтаксических конструкций, математических и логических выражений, нужно знать:
    • Область видимости переменных
    • Замыкания
    • Объектно-ориентированное программирование, в частности наследование через прототипы
    • Шаблон проектирования "модуль"
    • Операции над DOM
    • Понимание принципов событийно-ориентированного программирования
    Важно - нужно знать, откуда копипастить.
    Тебе нужно быть очень хорошо знакомым с одной-двумя-тремя популярными библиотеками на JavaScript. В идеале ты должен иметь представление о том, что определённый класс задач может быть решен с помощью определённых библиотек, хотя бы одной, но такие знания приходят с практикой. Вообще ты должен быть знаком с ними так близко, чтобы помнить, в какой части мануала по библиотеке можно найти описание форматов входных данных нужной тебе функции и какой будет результат, чтобы скопировать и вставить в свой код, а потом поправить, чтобы работало.

    Важно - инструменты программиста JavaScript
    У тебя должен быть удобный инструмент для разработки (IDE, Integrated Development Environment), чтобы он тебе подсвечивал код (syntax highlight) и подсказывал о синтаксических ошибках (syntax check), о формальных параметрах функций (type hinting), о стиле кодирования (code style), помогал писать код (live templates).
    Ты должен знать, как отлаживать скрипты в популярных браузерах (Firebug, Chrome Developer Tools и другое). Что такое точки останова, как управлять исполнением во время останова, как посмотреть и поменять содержимое переменных, как настроить останов по условию.

    Хотелось бы узнать что это за задачи(упомянутые вами 80%)


    Реальные задачи джунов:
    1. Возьми из сборника задач по javascript любой скрипт случайно и вслух расскажи, что он делает.
      Важно - читать и понимать чужой код намного важнее, чем писать свой. И на работе тебе это приддётся делать чаще, чем ты думаешь. Чтобы подключить к своему проекту чужую JS либу, нужно понимать что она делает, как она конфигурируется, как управлять её поведением. Скажу точно, что написать свой скрипт, который строит графики, намного сложнее, чем понять, как настраивается highcharts.

    2. Напиши скрипт на JS, который в заданном тексте удалит один или два символа, выбранных случайно
      1. Усложнение: удалять можно только буквы в словах, а знаки пунктуации и цифры удалять нельзя
      2. Усложнение: принять, что этот текст является программной на Javascript, удалить одну-две команды JS, но только если они не в строковых литерах (break как команду удалить можно, а в строке "break my heart" нельзя)
      3. Усложнение: воспользуйся этим скриптом и "попорти" код какого-нибудь другого скрипта на Javascript, а потом отладь, найди ошибку и восстанови работоспособность
      Важно - этим обычно все и занимаются - ищут баги. Только в реальной жизни они и без этого скрипта появляются. И не по одному, а прям пачками.

    3. На страницу HTML нужно встроить график курса доллара по отношению к рублю. Формат входного массива значений курса определи сам, исходя из своего скрипта для построения графиков.
      1. Усложнение: на одном графике должны быть два курса, по разным шкалам. Наприме, курс доллара к евро и курс юаня к рублю
      2. Усложнение: первоначально график вывести в детализации по месяцам, но чтобы можно было "приблизить" (drilldown) детализацию до дней
      3. Усложнение: первоначально график вывести текущем месяце, но чтобы можно было загрузить данные для предыдущего месяца без перезагрузки страницы (AJAX)

    4. При клике по картинкам, вставленным в текст HTML, показывать всплывающее окно для просмотра увеличенной картинки.
      1. Усложнение: в всплывающем окне сделать навигацию по картинкам, вперёд/назад и к нужной картинке
      2. Усложнение: в всплывающем окне вместо картинки показать видео-ролик с Youtube
      3. Усложнение: в всплывающем окне показать текст HTML

    5. По клику на кнопку "Click me" показать всплывающую форму.
      1. Усложнение: реализовать проверку данных на корректность перед отправкой формы (непустое значение, минимальное количество символов, максимальное количество символов, минимальное числовое значение, максимальное числовое значение)
      2. Усложнение: если в значении текстового поля встретилась гиперссылка, то считать её за 22 символа при любой длине этой ссылки (как в твитере)
      3. Усложнение: реализовать отправку формы на сервер через AJAX, без перезагрузки страницы
      4. Усложнение: саму форму в виде HTML загрузить с сервера через AJAX, в момент клика по кнопке "Click me", правила проверок данных должны как-нибудь "извлечься" из самой загруженной формы, например из аттрибутов полей ввода

    6. К форме ввода данных на поле ввода даты "навешать" всплывающий календарь для выбора даты.
      1. Усложнение: сделать форму календаря мультиязычной. Хотя бы через настройки на том же JavaScript
      2. Усложнение: сделать так, чтобы с помощью календаря можно было выбрать диапазон дат, чтобы она была привязана к двум полям формы "дата начала" и "дата окончания", и чтобы значение в поле "дата начала" обязательно была меньше чем в поле "дата окончания"
      3. Усложнение: сделать так, чтобы с помощью в календаре можно было видно визуально этот диапазон
      4. Усложнение: диапазон может быть открытым, но не пустым, то есть пользователь должен задать хотя бы дату начала или дату окончания.

    7. Сделать пред-просмотр веб-страницы HTML с разными темами. Тему страницы выбирать через селектор на javascript, а показывать в фрейме.
      1. Усложнение: сделать селектор "тип устройства", чтобы менять размер фрейма (например, "iPhone 5c 1136x640") и "чекбокс" для смены ориентации страницы "горизонтальная" или "вертикальная" (соответственно 1136x640 или 640x1136)
      2. Усложнение: в селекторе тем предусмотреть поиск тем по подстроке, и аналогично поиск устройств по части названия (авто-дополнение, auto-complete)
      3. Усложнение: тема страницы должна меняться без перезагрузки фрейма



    Задачи повышенной сложности, исходя из личного интереса
    1. Реализовать форму для многошагового мастера: форма должна состоять из нескольких страниц (шагов), пользователь может переключать страницы через какие-нибудь элементы управления "вперёд/назад" или "перейти на страницу".
      1. Усложнение: реализовать функциональную связь значений, когда некоторые данные зависят друг от друга (ввёл число в поле "количество" и в поле "сумма" значение пересчиталось)
      2. Усложение: доступность некоторых полей ввода должна зависеть от данных (например, если указал "есть личный самолёт", то значит можно ввести "марка самолёта")
      3. Усложение: видимость некоторых страниц должна зависеть от данных из предыдущих страниц (например, если указал "есть личный самолёт", значит появилась страница "ТТХ самолёта"; иначе страница должна скрыться)

    2. Реализовать однопользовательскую браузерную игру "змейка", "тетрис", "найди пару"
    3. Реализовать многопользовательскую браузерную игру "крестики-нолики", "морской бой" на два игрока в режиме "hot seat"
      1. Усложнение: два игрока на разных компьютерах, ходы передаются по websocket
      2. Усложнение: ограничение на ожидания окончания хода 15 секунд, по окончании ожидания автоматически делается случайный ход

    4. Реализовать todo-list. Пользователь вводит список, затем он превращается в строки с "чек-боксами". Когда "чекбокс" включен, строка зачёркивается.
      1. Усложнение: пользователь может переименовывать, удалять, добавлять строки
      2. Усложнение: список хранить в localStorage браузера, чтобы при перезагрузке страницы он восстанавливался
      3. Усложнение: пользователь может иметь несколько независимых списков todo

    5. Реализовать простой графический редактор. Пусть рисуется точка в месте, где пользователь кликнул.
      1. Усложнение: добавить переключатель режимов "точка"/"линия", в режиме "линия" рисуются линии между двумя последовательно кликнутыми точками
      2. Усложнение: можно менять толщину, цвет линий, размер точек
      3. Усложнение: последовательность кликов можно воспроизвести ещё раз с самого начала, равномерно или с реальной задержкой между кликами, с обычной скоростью или ускоренно
      4. Усложнение: можно выгрузить получившийся рисунок в формате PNG или SVG, причём SVG c анимацией воспроизведения



    Можно использовать любую существующую библиотеку.
    Например,
    для построения графиков www.highcharts.com
    для загрузки и передачи данных через AJAX: jquery.com + что-нибудь на сервере
    для всплывающих диалогов с картиками, видео и формами: fancyapps.com/fancybox и https://jqueryui.com/dialog/
    для валидации форм rickharrison.github.io/validate.js
    для календаря https://jqueryui.com/datepicker/
    для автодополнения https://jqueryui.com/autocomplete/
    для передачи данных между несколькими пользователями socket.io или обычный AJAX
    Ответ написан
    16 комментариев
  • Как сделать мгновенное изменение изображения?

    copist
    @copist
    Empower people to give
    Вызывать отправку формы после выбора файла
    <form id="uploadForm" method="post" enctype="multipart/form-data">
       <input type="file" id="userPhotoInput" name="files[]">
    </form>

    <script type="text/javascript">
    $(document).ready(function() {
        $('#userPhotoInput').on('change', function() { this.form.submit(); });
    });
    </script>
    Ответ написан
    Комментировать
  • Почему все равно приходится обновлять страницу?

    copist
    @copist
    Empower people to give
    В заголовках ответа есть указание на кэширование в браузере.
    Добавь заголовки, которые подавляют в браузере на девелоперской машине, по кукам или по IP.
    Ответ написан
    Комментировать
  • Как создать конструктор для сайта?

    copist
    @copist
    Empower people to give
    Вариант 1. Нарисовать здание со всеми вообще конструкционными элементами в векторном графическом редакторе, который умеет экспортировать картинки в формате SVG, отдельным элементам проставить идентификаторы. Пример установки идентификатора элемента в изображении SVG через Inkscape take.ms/0lpl8
    Затем вставить файл SVG в HTML и с помощью Javascript включать/выключать некоторые кривые в такой картинке. Пример: take.ms/dhNfG
    Рабочий пример на Codepen codepen.io/copist/pen/WvVRRL

    Вариант 2. Сделать много мелких картинок PNG для отдельных элементов и из таких картинок собирать большую картинку как пазл: крыша#1 + стены#2 + окна#3 опять же с помощью Javascript
    Вариант 3. Реализовать отрисовку через Canvas
    Вариант 4. Запрограммировать по тому же принципу, что и SVG, но на Flash
    Вариант 5. И ещё есть Silverlight
    Ответ написан
    Комментировать
  • Как заменить слово на сторонний javascript без php?

    copist
    @copist
    Empower people to give
    $(":contains('[word]')").each( // найти все элементы, содержащие строку [word]
        function(i,e){
            var $e = $(e),
                html = $e.html();
            html = html.replace(/\[word\]/g, '[hello]'); // заменить [word] на [hello]
            $e.html(html);
        });
    Ответ написан
  • Почему пропадают куки после перезагрузки страницы?

    copist
    @copist
    Empower people to give
    мануал: setcookie

    сигнатура:
    bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )

    Я бы ещё указал параметры путь $path='/' и домен $domain='какой-надо.ru'
    Ответ написан
    Комментировать
  • Как заставить Yandex корректно индексировать Ajax-сайт, который использует HTML5-режим работы URL?

    copist
    @copist
    Empower people to give
    Отрисовывай страницы через prerender.io

    Статья на эту тему: https://scotch.io/tutorials/angularjs-seo-with-pre...
    Но подход одинаковый вообще для любых сайтов, где часть контента генерируется через javascript
    Ответ написан
    Комментировать
  • Что делать дальше?

    copist
    @copist
    Empower people to give
    Собирай опыт сам в том, к чему душа тянется.
    Ответ написан
    Комментировать
  • Отправка JSON'a через XHR с помощью POST-метода - как принимать и парсить?

    copist
    @copist
    Empower people to give
    stackoverflow.com/a/8945912

    $entityBody = file_get_contents('php://input');
    Ответ написан
    Комментировать
  • Как распечатать чек на фискальном регистраторе из браузера?

    copist
    @copist
    Empower people to give
    Фискальный регистратор обычно стоит рядом с персональным компьютером пользователя.
    Можно написать Java-applet, или ActiveX, или плагин под браузер. Они должны уметь общаться через порты COM или USB.
    Можно написать приложение, которое будет работать как веб-сервер на компьютере пользователя и принимать запросы по протоколу HTTP и при этом сможет общаться с фискальным регистратором через USB или COM.
    Ответ написан
    Комментировать
  • Как выполннить большой скрипт php через ajax?

    copist
    @copist
    Empower people to give
    А. Экономь память
    1. Храни как можно меньше данных в памяти. Запросы в БД делай через курсоры, чтобы извлекалось меньше записей. Не используй жадные выборки без перечисления полей (SELECT *) особенно если в запросе есть JOIN.
    2. Не храни в памяти сырые данные. Копи суммы по каждой записи, веди счётчики где надо, вычисляй функции, даже формируй HTML по мере чтения, но целиком выборку в память не собирай.
    Б. Используй очереди (RabbitMQ и другие) для реализации асинхронности, чтобы браузер не ждал бесконечно ответа. Ответ запрашивай отдельным запросом
    В. ... или сделай сервер Comet и пусть PHP сам выдаст результат, когда закончит работу
    Ответ написан
    Комментировать
  • Python/Django-кидди, SQL-мартышка, Web-негр — что перспективнее (Ага, «Pre-Junior»)?

    copist
    @copist
    Empower people to give
    Мне очень понравился твой вопрос. Это лучший вопрос новичка, который я видел на Тостере, я бы дал "Приз Года", честно, без сарказма. Ты уже сделал выбор, когда начал искать место, куда пристроиться. Мне кажется, у тебя получится пробиться дальше, даже если ты сейчас *нечаянно* выберешь не то место для старта.

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

    И меняй работу (ага) регулярно, скажем так через год-два. Не через месяц-три, а именно через год-два. Чем ты будешь заниматься эти два года - частично зависит от работодателя, а больше от тебя лично. А запись "2 года честно оттрубил от рассвета до заката" помогут тебе в будущем.

    P.S. В Краснодаре удалённо работает мой коллега по компании Icons8 - ничто не мешает ему жить в краю с тёплым климатом и получать хорошую зарплату. До этого мёрз на Дальнем Востоке.

    P.P.S. Кроме твоего вопроса меня также удивило то, кто именно тебе здесь отвечает. Сотрудники (бывшие?) тех организаций что ли здесь? Никогда с таким не сталкивался.
    Ответ написан
    1 комментарий