В кросс-доменном XMLHttpRequest можно указать не только GET/POST, но и любой другой метод, например PUT, DELETE.
Когда-то никто и не думал, что страница сможет сделать такие запросы. Поэтому ряд веб-сервисов написаны в предположении, что «если метод – нестандартный, то это не браузер». Некоторые веб-сервисы даже учитывают это при проверке прав доступа.
Чтобы пресечь любые недопонимания, браузер использует предзапрос в случаях, когда:
Если метод – не GET / POST / HEAD.
Если заголовок Content-Type имеет значение отличное от application/x-www-form-urlencoded, multipart/form-data или text/plain, например application/xml.
Если устанавливаются другие HTTP-заголовки, кроме Accept, Accept-Language, Content-Language.
…Любое из условий выше ведёт к тому, что браузер сделает два HTTP-запроса.
Первый запрос называется «предзапрос» (английский термин «preflight»). Браузер делает его целиком по своей инициативе, из JavaScript мы о нём ничего не знаем, хотя можем увидеть в инструментах разработчика.
Этот запрос использует метод OPTIONS. Он не содержит тела и содержит название желаемого метода в заголовке Access-Control-Request-Method, а если добавлены особые заголовки, то и их тоже – в Access-Control-Request-Headers.
Его задача – спросить сервер, разрешает ли он использовать выбранный метод и заголовки.
На этот запрос сервер должен ответить статусом 200, без тела ответа, указав заголовки Access-Control-Allow-Method: метод и, при необходимости, Access-Control-Allow-Headers: разрешённые заголовки.
что при достижении 50$к по российскому законодательству вы обязаны оформить паспорт сделки. Это не так сложно, но в моём конкретном случае невыгодно (в банке на букву Т при оформлении паспорта сделки ты обязан переключиться с тарифа за 490р на тариф за 990+990р).
// определяем объект примеси
var myMixin = {
created: function () {
this.hello()
},
methods: {
hello: function () {
console.log('привет из примеси!')
}
}
}
Vue.mixin(myMixin)
<div id="app">
<p>{{ helloText }}</p>
</div>
const mylib = {
hello : (text1, text2) => {
return `Hello! ${text1} ${text2}`
},
install: function(Vue){
Object.defineProperty(Vue.prototype, 'mylib', {
get () { return mylib }
})
}
};
Vue.use(mylib);
new Vue({
el: '#app',
data: {
helloText: mylib.hello('one', 'two')
}
});
<template>
<div>
<header></header>
<sidebar></sidebar>
<slot name="content"></slot>
</div>
</template>
<!-- some page -->
<my-layout>
<div slot="content">
<!-- page content -->
</div>
</my-layout>
() => console.log('res')
ну или console.log.bind(console, 'res')