• Можно ли скрыть Json файлы Laravel/Vue?

    BRAGA96
    @BRAGA96
    Server Side Rendering или Pre-Render

    На фронте ваш вопрос звучит так: как показать данные клиенту, чтобы он их не увидел?
    Ответ написан
    4 комментария
  • В каких местах лучше заменить код для дальнейшей адаптации на любой проект?

    BRAGA96
    @BRAGA96
    (function () {
        'use strict';
    
        const myTab = function (selector, options) {
            const setting = Object.assign({
                // параметры по умолчанию
            }, options || {});
    
            // код логики табов
    
        };
    
        // Цепляем функцию плагина на глобальный объект
        window.myTab = myTab;
    
    }());
    
    //> Инициализируем плагин
    window.myTab('.my-tab-selector', {
        active: 'active-item',
        content: 'tab-item-content',
        tabs: '.tabs',
        onChange: function (tab) {
            console.log('Таб переключили')
        }
    });
    Ответ написан
    3 комментария
  • Условия, чтобы не банили за майнинговые скрипты?

    BRAGA96
    @BRAGA96
    Только после нажатия на кнопку подключайте код майнинга и его инициализацию. Покажите какой-то попап с соглашениями, какой-то чекбокс, что я все понимаю и со всем согласен и думаю все будет ок. В любом случае пользователь точно сам согласился, а не случайно нажал на кнопку.
    Ответ написан
  • Как это написать на нативном js?

    BRAGA96
    @BRAGA96
    const html = parseHTML('<a href="#">Example</a>');
    const text = html.querySelector('a').innerText;
    
    console.log(text); //> Example
    
    function parseHTML(html) {
        var page = document.implementation.createHTMLDocument();
        page.body.innerHTML = html;
        return page.body;
    }
    Ответ написан
    Комментировать
  • Как javascript'ом перехватывать загрузки изображений, стилей и скриптов?

    BRAGA96
    @BRAGA96
    puppeteer
    Ответ написан
    Комментировать
  • Какие гибридные приложения вы знаете?

    BRAGA96
    @BRAGA96
    Instagram (react native)
    Ответ написан
    Комментировать
  • Как запретить все запросы, кроме как ajax'ом с того же сайта?

    BRAGA96
    @BRAGA96
    Даже если вы сделаете запросы с этого же домена, то что мне мешает кинуть запрос из консоли на вашем же сайте. Проверка должна быть на сервере, в файле code.php.
    Ответ написан
    Комментировать
  • Как при помощи js или jquery создать сложную DOM структуру?

    BRAGA96
    @BRAGA96
    Шаблонные строки ``
    Ответ написан
    Комментировать
  • Как добавить html в html с помощью Ajax?

    BRAGA96
    @BRAGA96
    Для таких задач идеально подходят js фреймворки, например vue, angular, react.
    Если хочется свой велосипед, то как-то так:

    JSON шаблон
    [
        {
            "title": "About my company",
            "text": "Lorem ipusm ..."
        }
    ]


    HTML Шаблон
    <div class="about">
        <h2>{{title}}</h2>
        <p>{{text}}</p>
    </div>


    JavaScript
    (function ($) {
        'use strict';
    
        JSONTemplate(
            'https://example.com/api/about.json',
            'https://example.com/templates/about.html'
        ).then(function (html) {
            $('body').append(html);
        });
    
        function JSONTemplate(jsonLink, htmlLink) {
            return promise(function (resolve, reject) {
                $.when(
                    ajax(jsonLink, {
                        dataType: 'json'
                    }),
                    ajax(htmlLink, {
                        dataType: 'text'
                    })
                ).done(function (json, html) {
                    var $html = '';
                    json.forEach(function (item) {
                        $html += tag(html, item);
                    });
                    return resolve($html);
                }).fail(reject);
            });
        }
    
        function ajax(link, setup) {
            return $.ajax($.extend(true, {}, {
                method: 'GET'
            }, setup || {}, {
                url: link
            }));
        }
    
        function tag(input, data) {
            for (var tag in data) {
                input = input.replace(new RegExp('\{\{' + tag + '\}\}', 'g'), data[tag]);
            }
            return input;
        }
    
        function promise(callback) {
            var deferred = $.Deferred();
            callback && callback(deferred.resolve, deferred.reject);
            return deferred;
        }
    }(jQuery));


    Результат
    <body>
        <div class="about">
            <h2>About my company</h2>
            <p>Lorem ipusm ...</p>
        </div>
    </body>


    Вот вам полный пример с маленьким шаблонизатором, чтобы можно было использовать теги в шаблонах, например:
    <div class="item">
        <h2>{{title}}</h2>
        <div>{{price}} <span v-show="discount">{{discount}}</span></div>
        <button>{{button}}</button>
    </div>
    Ответ написан
    Комментировать
  • Как одновременно вернуть переменную и promise при вызове ajax'а в функции (JQuery)?

    BRAGA96
    @BRAGA96
    asynchronous().then(function (data) {
        console.log(data); //> "test"
    });
    
    function promise(callback) {
        var deferred = $.Deferred();
        callback & callback(deferred.resolve, deferred.reject);
        return deferred;
    }
    
    function asynchronous() {
        return promise(function (resolve ,reject) {
            resolve('test');
        });
    }
    Ответ написан
    Комментировать
  • Как скрыть чужую рекламу через JS?

    BRAGA96
    @BRAGA96
    // Клик на кнопку "Отследить"
    $('#trackBtn').on('click', function (event) {
        event.stopPropagation();
        // Ищем iframe виджета и ждем когда он загрузится
        $('#YQContainer').find('iframe').on('load', function () {
            // Скрываем нужный блок в iframe
            $(this).contents().find('.tracklist-da').hide();
        });
    });
    Ответ написан
  • Возможно ли добавить ключ к одному объекту из другого более простым способом (например используя spread)?

    BRAGA96
    @BRAGA96
    Я бы сделал запрос чтобы выкачать данные валют и запрос чтобы запросить текущие курсы фиатных валют. Перемножил бы цены из USD в нужные курсы и вывел бы в объект.
    'use strict';
    
    const axios = require('axios');
    
    void async function main() {
        const data = await Promise.all([
            getCryptoList(3), 
            getConvertCurrency(['EUR', 'RUB', 'GBP', 'UAH'])
        ]);
        const result = appendCryptoCourses(...data);
        console.log(result);
    }();
    
    function appendCryptoCourses(list, courses) {
        for (const id in list) {
            const coin = list[id];
            for (const currency in courses) {
                const course = courses[currency];
                coin.quotes[currency] = {
                    price: coin.quotes.USD.price * course,
                    volume_24h: coin.quotes.USD.volume_24h * course,
                    market_cap: coin.quotes.USD.market_cap * course,
                    percent_change_1h: coin.quotes.USD.percent_change_1h,
                    percent_change_24h: coin.quotes.USD.percent_change_24h,
                    percent_change_7d: coin.quotes.USD.percent_change_7d
                };
            }
        }
        return list;
    }
    
    async function getCryptoList(limit) {
        const list = await request('https://api.coinmarketcap.com/v2/ticker/', { limit });
        return list.data;
    }
    
    function getConvertCurrency(symbols) {
        return request('https://min-api.cryptocompare.com/data/price', {
            fsym: 'USD',
            tsyms: Array.isArray(symbols) ? symbols.join(',') : symbols
        });
    }
    
    function request(link, params) {
        return new Promise((resolve, reject) => {
            axios.get(link, { params }).then(response => resolve(response.data)).catch(reject);
        });
    }


    Чтобы запустить создайте папку, в ней файл index.js. В файл index.js скиньте этот код. После этого откройте консоль в этой папке и напишите: npm install axios --save-dev
    После всего этого стартуем: node index.js

    Если кратко то на выходе получаем такой объект:
    {
        "1": {
            "id": 1,
            "name": "Bitcoin",
            "symbol": "BTC",
            "website_slug": "bitcoin",
            "rank": 1,
            "circulating_supply": 17388287,
            "total_supply": 17388287,
            "max_supply": 21000000,
            "quotes": {
                "USD": {
                    "price": 4499.33210008,
                    "volume_24h": 5185812375.72332,
                    "market_cap": 78235677865,
                    "percent_change_1h": -0.45,
                    "percent_change_24h": -2.14,
                    "percent_change_7d": -19.21
                },
                "EUR": {
                    "price": 3946.8141181901756,
                    "volume_24h": 4548994615.984496,
                    "market_cap": 68628336623.178,
                    "percent_change_1h": -0.45,
                    "percent_change_24h": -2.14,
                    "percent_change_7d": -19.21
                },
                "RUB": {
                    "price": 304109.8566444072,
                    "volume_24h": 350509058475.1392,
                    "market_cap": 5287949466895.351,
                    "percent_change_1h": -0.45,
                    "percent_change_24h": -2.14,
                    "percent_change_7d": -19.21
                },
                "GBP": {
                    "price": 3515.7781030025117,
                    "volume_24h": 4052193790.390202,
                    "market_cap": 61133358683.711,
                    "percent_change_1h": -0.45,
                    "percent_change_24h": -2.14,
                    "percent_change_7d": -19.21
                },
                "UAH": {
                    "price": 129310.80455629919,
                    "volume_24h": 149040247678.2882,
                    "market_cap": 2248493381840.1,
                    "percent_change_1h": -0.45,
                    "percent_change_24h": -2.14,
                    "percent_change_7d": -19.21
                }
            },
            "last_updated": 1542886571
        },
        "52": {
            "id": 52,
            "name": "XRP",
            "symbol": "XRP",
            "website_slug": "ripple",
            "rank": 2,
            "circulating_supply": 40327341704,
            "total_supply": 99991780039,
            "max_supply": 100000000000,
            "quotes": {
                "USD": {
                    "price": 0.4375704632,
                    "volume_24h": 579102404.360952,
                    "market_cap": 17646053587,
                    "percent_change_1h": -0.18,
                    "percent_change_24h": -1.61,
                    "percent_change_7d": -4.17
                },
                "EUR": {
                    "price": 0.38383681031904,
                    "volume_24h": 507988629.1054271,
                    "market_cap": 15479118206.5164,
                    "percent_change_1h": -0.18,
                    "percent_change_24h": -1.61,
                    "percent_change_7d": -4.17
                },
                "RUB": {
                    "price": 29.575387607688,
                    "volume_24h": 39141531510.75675,
                    "market_cap": 1192696761945.33,
                    "percent_change_1h": -0.18,
                    "percent_change_24h": -1.61,
                    "percent_change_7d": -4.17
                },
                "GBP": {
                    "price": 0.34191755994448,
                    "volume_24h": 452510618.7676479,
                    "market_cap": 13788626272.8818,
                    "percent_change_1h": -0.18,
                    "percent_change_24h": -1.61,
                    "percent_change_7d": -4.17
                },
                "UAH": {
                    "price": 12.575775112368,
                    "volume_24h": 16643403101.33376,
                    "market_cap": 507147580090.37994,
                    "percent_change_1h": -0.18,
                    "percent_change_24h": -1.61,
                    "percent_change_7d": -4.17
                }
            },
            "last_updated": 1542886561
        },
        "1027": {
            "id": 1027,
            "name": "Ethereum",
            "symbol": "ETH",
            "website_slug": "ethereum",
            "rank": 3,
            "circulating_supply": 103354703,
            "total_supply": 103354703,
            "max_supply": null,
            "quotes": {
                "USD": {
                    "price": 132.472624031,
                    "volume_24h": 2224827274.81642,
                    "market_cap": 13691668675,
                    "percent_change_1h": -0.59,
                    "percent_change_24h": -2.93,
                    "percent_change_7d": -25.14
                },
                "EUR": {
                    "price": 116.20498579999321,
                    "volume_24h": 1951618485.4689636,
                    "market_cap": 12010331761.71,
                    "percent_change_1h": -0.59,
                    "percent_change_24h": -2.93,
                    "percent_change_7d": -25.14
                },
                "RUB": {
                    "price": 8953.824658255291,
                    "volume_24h": 150376075504.84183,
                    "market_cap": 925419885743.25,
                    "percent_change_1h": -0.59,
                    "percent_change_24h": -2.93,
                    "percent_change_7d": -25.14
                },
                "GBP": {
                    "price": 103.51410841782341,
                    "volume_24h": 1738480032.5415506,
                    "market_cap": 10698669902.645,
                    "percent_change_1h": -0.59,
                    "percent_change_24h": -2.93,
                    "percent_change_7d": -25.14
                },
                "UAH": {
                    "price": 3807.26321465094,
                    "volume_24h": 63941535878.22391,
                    "market_cap": 393498557719.5,
                    "percent_change_1h": -0.59,
                    "percent_change_24h": -2.93,
                    "percent_change_7d": -25.14
                }
            },
            "last_updated": 1542886521
        }
    }
    Ответ написан
    Комментировать
  • Как сделать проверку для букв из любой кодировки?

    BRAGA96
    @BRAGA96
    var testReg = /[\u0000-~Ͱ-ϾЀ-Ӿ\u0600-۾ݐ-ݾ\u08a0-\u08feﭐ-\ufdfeﹰ-\ufefe]|\ud802[\ude60-\ude7e]/;
    
    console.table({
    	Latin: testReg.test('daWAFfsh'),
    	Cyrilic: testReg.test('пывопЫУПоыры'),
    	Arab: testReg.test('الانضمام لفوتسي وتباين بقية')
    });
    Ответ написан
    Комментировать
  • Как из ссылки оставить только, что после #access_token= и до следующего &?

    BRAGA96
    @BRAGA96
    function getHashParams(link) {
        return (link.match(/([^#=&]+)(=([^&]*))/g) || []).reduce(function (a, b) {
            return ((a[b.slice(0, b.indexOf('='))] = b.slice(b.indexOf('=') + 1)), a);
        }, {});
    }
    
    getHashParams('https://oauth.vk.com/blank.html#access_token=f95b38f461921538c204e7218e43cdc9bc40fdbf378c1adb68967c2f8b84603397f9226b7&expires_in=0&user_id=11111111')
    
    //> {access_token: "f95b38f461921538c204e7218e43cdc9bc40fdbf378c1adb68967c2f8b84603397f9226b7", expires_in: "0", user_id: "11111111"}
    Ответ написан
    1 комментарий
  • SpringMVC + JSON + Ajax, как обработать массив JSON и добавить код в HTML?

    BRAGA96
    @BRAGA96
    Ну если вкратце то как-то так:
    ajax('https://example.com/stations', { //> https://example.com/stations?country=russia&limit=10
        country: 'russia',
        limit: 10
    }).done(function (data) {
        var table = '';
        for (var key in data) {
            table += templateDOM(data[key]) || '';
        }
        $('body').append('<table>' + table + '</table>');
    });
    
    function ajax(link, params, setup) {
        return $.ajax($.extend(true, {}, {
            method: 'GET',
            dataType: 'json'
        }, setup || {}, {
            url: link + (params ? '?' + $.param(params) : '')
        }));
    }
    
    function templateDOM(data) {
        return `
            <tr>
                <td>${data.id}</td>
                <td>${data.routeName}</td>
                <td>${data.stationName}</td>
                <td>${data.dateArrival || '-----'}</td>
                <td>${data.dateDeparture}</td>
            </tr>
        `;
    }
    Ответ написан
    Комментировать
  • Как отловить location header в JQuery Ajax запросе?

    BRAGA96
    @BRAGA96
    $.ajax({
        url: 'https://jsonplaceholder.typicode.com/users',
        method: 'GET',
        dataType: 'json',
        success: function (data, status, jqXHR) {
            console.log(jqXHR.getAllResponseHeaders()); 
            // или jqXHR.getResponseHeader('location') (если такой header есть) 
        }
    });
    
    // pragma: no-cache
    // content-type: application/json; charset=utf-8
    // cache-control: public, max-age=14400
    // expires: Mon, 19 Nov 2018 11:10:53 GMT
    Ответ написан
    Комментировать
  • Как правильно оформить запрос AJAX?

    BRAGA96
    @BRAGA96
    У Вас функция success_add_favorite() выполняется сразу а не в callback`е success.
    Напишите так, без немедленного вызова:
    success: success_add_favorite

    В jQuery после 1.9 версии параметра type: 'POST' нету, есть method: 'POST'

    При использовании функции $.ajax лучше возвращать её Deferred объект, так вы будете знать промис когда она выполнилась не только в callback success или error:
    function someFunction(userID, postID) {
        return $.ajax({...});
    }
    
    someFunction(a, b).done(function () {
        //> Запрос прошел успешно
    });


    Вы отправляете json, так укажите это в Content-Type: 'application/json'. И укажите тип который принимаете, например dataType: 'json'

    Можете написать свою функции promise используя deferred объекты, например так:
    getUsers().done(function (users) {
        console.log(users);
    });
    
    function promise(callback) {
        var deferred = $.Deferred();
        callback && callback(deferred.resolve, deferred.reject);
        return deferred;
    }
    
    function getUsers() {
        return promise(function (resolve, reject) {
            $.ajax({
                url: 'https://jsonplaceholder.typicode.com/users',
                method: 'GET',
                dataType: 'json',
                success: function (users) {
                    resolve(users.filter(function (user) {
                        return user.id <= 5;
                    }));
                },
                error: reject
            });
        });
    }


    А также аналог Promise.all:
    promiseAll([promise, promise, promise]).done(function () {
        //> Все промисы завершенны успешно
    });
    
    function promiseAll(promises) {
        return $.when.apply(null, promises);
    }


    Вот вам пример правильного оформленного post запроса:
    addPost({
        title: 'foo',
        body: 'bar',
        userId: 1
    }).done(function (response) {
        console.log(response); //> {title: "foo", body: "bar", userId: 1, id: 101}
    });
    
    function addPost(data) {
        return $.ajax({
            url: 'https://jsonplaceholder.typicode.com/posts',
            method: 'POST',
            dataType: 'json',
            contentType: 'application/json',
            data: JSON.stringify(data)
        });
    }
    Ответ написан
    Комментировать