request('http://api.randomuser.me/1.0/', {
results: 50,
nat: ['gb', 'us'],
inc: ['gender', 'name', 'location', 'email', 'phone', 'picture']
}).get(function (data) {
console.log(data);
}, function (error) {
console.log(error);
});
request('https://jsonplaceholder.typicode.com/posts', {
title: 'foo',
body: 'bar',
userId: 1
}).post(function (data) {
console.log(data);
}, function (error) {
console.log(error);
});
function request(link, params, setup) {
return {
get: function (success, error) {
return ajax(extend({}, {
url: link + (params ? '?' + param(params) : ''),
method: 'GET',
success: success || function () {},
error: error || function () {}
}, setup || {}));
},
post: function (success, error) {
return ajax(extend({}, {
url: link,
method: 'POST',
headers: {
'Content-Type': 'application/json; charset=UTF-8'
},
data: params,
success: success || function () {},
error: error || function () {}
}, setup || {}));
}
};
}
function ajax(params) {
var setting = extend({}, {
url: window.location.href,
method: 'GET',
async: true,
data: undefined,
headers: {
'Content-type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
success: function (data, xhr, params) {},
error: function (error, xhr, params) {}
}, params || {});
var setHeaders = function (headers) {
for (var name in headers) {
this.setRequestHeader(name, headers[name]);
}
};
var xhr = new XMLHttpRequest();
xhr.open(setting.method, setting.url, setting.async);
setHeaders.call(xhr, setting.headers);
xhr.onreadystatechange = function () {
if (this.readyState === 4) {
if (this.status >= 200 && this.status < 400) {
var data = (function () {
try {
return JSON.parse(this.response);
} catch (error) {
return this.response;
}
}).call(this);
setting.success(data, this, setting);
} else {
setting.error(this.status, this, setting);
}
}
}
xhr.send(setting.data ? JSON.stringify(setting.data) : null);
return xhr;
}
function param(data) {
var result = '';
for (var name in data) {
result += name + '=' + (Array.isArray(data[name]) ? data[name].join(',') : data[name]) + '&';
}
return result.slice(0, -1);
}
function extend(output) {
output = output || {};
for (var i = 1; i < arguments.length; i++) {
if (!arguments[i]) continue;
for (var key in arguments[i]) {
if (arguments[i].hasOwnProperty(key)) {
output[key] = arguments[i][key];
}
}
}
return output;
}
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://api.randomuser.me/1.0/?results=50&nat=gb,us&inc=gender,name,location,email,phone,picture', true);
xhr.onreadystatechange = function () {
if (this.readyState === 4) {
if (this.status >= 200 && this.status < 400) {
var data = JSON.parse(this.response);
console.log('Успех', data);
} else {
console.log('Ошибка', this);
}
}
}
xhr.send(null);
(function ($) {
'use strict';
void function main() {
// Пример использования promise
promise(function (resolve, reject) {
resolve('example data');
}).done(function (data) {
console.log(data); //> "example data"
});
// Пример использования promiseAll
var deferreds = [$.Deferred().resolve(1), $.Deferred().resolve(2), $.Deferred().resolve(3)];
promiseAll(deferreds).done(function () {
console.log(arguments); //> [1, 2, 3]
});
}();
function promise(callback) {
var deferred = $.Deferred();
callback && callback(deferred.resolve, deferred.reject);
return deferred;
}
function promiseAll(deferreds) {
return $.when.apply(null, deferreds);
}
}(jQuery));
getFile('plan-floor-pop-up.html', function ($html) {
return $('#one', $html);
}).done(function ($html) {
//> Нужный jQuery Selector для вставки в DOM
});
function getFile(link, filter) {
return $.ajax($.extend(true, {}, {
method: 'GET',
dataType: 'text',
dataFilter: function (response) {
var $html = $(response);
if (filter) filter($html);
return $html;
}
}, {
url: link
}));
}
/**
* @name PluginName
* @version 1.0.0
* @description jQuery Plugin
* @since DD:MM:YYYY
*/
;(function ($) {
'use strict';
/**
* @description Глобальный объект общих параметров плагина
* @type {Object}
*/
var plugin = {
name: 'PluginName',
version: '1.0.0',
data: {
general: 'general',
setting: 'setting'
}
};
/**
* @description Параметры инициализации плагина по умолчанию
* @type {Object}
*/
var defaults = {
};
/**
* @description Объект свойст для работы плагина
* @type {Object}
*/
var operative = {
context: null,
type: 'init',
method: 'init'
};
/**
* @description Объект публичных методов плагина
* @type {Object<Function>}
*/
var api = {};
/**
* @description Метод инициализации плагина
* @type {Function}
* @param {jQuery HTMLElement} $this jQuery DOM элемент на который инициализировали плагин
* @param {Object} options Объект параметров инициализации
* @param {Object} common Объект дополнительных параметров для работы плагина
* @returns {jQuery HTMLElement} this
*/
api.init = function ($this, options, common) {
var setting = pluginSetting($this).set(plugin.data.setting, $.extend(true, {}, defaults, options));
var general = pluginSetting($this).set(plugin.data.general, $.extend(true, {}, operative, common));
//> Код плагина
return $this;
};
/**
* @description Метод получения параметров инициализации плагина
* @type {Function}
* @this {HTMLElement} DOM элемент на который инициализировали плагин
* @param {String} [category = plugin.data.setting] Категория параметров, например "setting" или "general"
* @param {String} key Ключ объекта параметров
* @returns {Object | null} Объект параметров или null
*/
api.get = function (category, key) {
var params = pluginSetting($(this)).get(category || plugin.data.setting);
return key ? params && params[key] ? params[key] : null : params || null;
};
/**
* @description Метод установки новых значения и реинициализация плагина
* @type {Function}
* @this {HTMLElement} DOM элемент на который инициализировали плагин
* @param {Object} params Объект новых параметров
* @returns {HTMLElement} this
*/
api.set = function (params) {
var setting = pluginSetting($(this)).get(plugin.data.setting);
return api.init($(this), $.extend(true, {}, setting, params), {
context: this,
type: 'update',
method: 'set'
});
};
/**
* @description Метод получения текущей версии плагина
* @type {Function}
* @this {HTMLElement} DOM элемент на который инициализировали плагин
* @returns {String} Версия плагина, например "1.0.0"
*/
api.version = function () {
return plugin.version;
};
/**
* @description Проверить на Объект тип переданной сущности
* @param {*} value Сущность
* @returns {Boolean}
*/
function isObject(value) {
return typeof value === 'object' && !Array.isArray(value) && value !== null;
}
/**
* @description Установить/получить настройки плагина
* @type {Function}
* @param {jQuery HTMLElement} $selector jQuery DOM элемент на который будут установленны настройки
* @returns {Object<Function>} Объект методов
*/
function pluginSetting($selector) {
return {
set: function (key, setting, filter) {
var current = this.get(key);
var params = $.extend(true, {}, current, setting);
if (filter) filter(params);
$selector.data(plugin.name, $.extend(true, {}, this.get(), createObjectWithKey(key, params)));
return params;
},
get: function (key) {
var data = $selector.data(plugin.name);
return key ? data && data[key] ? data[key] : null : data || null;
}
};
}
/**
* @description Получить объект с переданным ключом и значением
* @param {String} key Ключ объекта
* @param {*} value Значение свойства объекта
* @returns {Object}
*/
function createObjectWithKey(key, value) {
var object = {};
object[key] = value;
return object;
}
/**
* @description Установка методов плагина на глобальный объект jQuery
* @type {Function}
* @this {jQuery HTMLElement} jQuery DOM элемент на который инициализировали плагин
* @param {Object | String} Параметры инициализации плагина или название метода
* @returns {jQuery HTMLElement | *} this или результат вызова метода
*/
$.fn[plugin.name] = function (setting) {
if (isObject(setting) || !setting) {
return $.each(this, function () {
api.init($(this), setting, {
context: this,
type: 'init',
method: 'init'
});
});
} else if (typeof setting === 'string') {
var args = [].slice.call(arguments, 1);
var method = setting.toLowerCase();
for (var i = 0; i < this.get().length; i++) {
if (method === 'init') break;
var context = this.get(i);
if (['get', 'version'].includes(method)) {
return api[method].apply(context, args);
} else {
api[method].apply(context, args);
}
}
}
return this;
};
})(jQuery);
<FORM NAME="form" onSubmit="return Complete();">
<BUTTON TYPE="submit">Готово</BUTTON>
browser-sync start --server "название папки" --files "название папки"
var owl = $('.owl-carousel');
owl.owlCarousel();
// Listen to owl events:
owl.on('changed.owl.carousel', function(event) {
//> ваша функция
})
var user = {};
$.getJSON('https://api.ipify.org/?format=json', function(data) {
user = data;
console.log(user);
});
var user = {};
getUserInfo().then(function() {
console.log(user);
});
function getUserInfo() {
return $.getJSON('https://api.ipify.org/?format=json', function(data) {
user = data;
});
}