09.08.2015, 17:58
|
|
Профессор
|
|
Регистрация: 15.01.2015
Сообщений: 622
|
|
Сообщение от Erolast
|
система кармы тут, по меньшей мере, странная
|
ОФФТОП:
На астрофоруме повторно + можно ставить только через 72 часа. Мне кажется было бы разумно
|
|
09.08.2015, 21:35
|
|
Профессор
|
|
Регистрация: 22.05.2015
Сообщений: 384
|
|
Сообщение от Safort
|
Повторно можно поставить плюс только после того, как несколько раз другим изменишь карму.
|
если уточнить после пятого раза изменения кармы другому)
я как-то одному челу карму дрочил, только три раза минусанул, потом психанул
|
|
09.08.2015, 21:39
|
|
Профессор
|
|
Регистрация: 22.05.2015
Сообщений: 384
|
|
И по теме - а чем промисы (не называйте их обещаниями, не трахайте мой девственный мозг)))) так не удобны? - http://learn.javascript.ru/promise
|
|
10.08.2015, 09:17
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Удобность - понятие относительное. Относительно традиционных коллбеков - да, штука классная. Относительно async/await - то еще говно:
//async/await
async function loadUser(id) {
let user;
try {
let response = await fetch(`/api/users/${id}`);
user = response.body;
} catch (error) {
console.error(error);
}
return user;
}
//Promises
function loadUser(id) {
return new Promise((resolve) => {
fetch(`/api/users/${id}`).then((response) => {
return response.body;
}).catch((error) => {
console.log(error);
return undefined;
}).then((user) => {
resolve(user);
});
});
}
И это простейший пример, без нескольких поочередных запросов и без циклов.
|
|
10.08.2015, 17:40
|
|
Профессор
|
|
Регистрация: 22.05.2015
Сообщений: 384
|
|
Сообщение от Erolast
|
Относительно традиционных коллбеков - да, штука классная
|
вот именно!) но сейчас, увы, мало кто юзает es6...
=========================
До Babel
//async/await
async function loadUser(id) {
let user;
try {
let response = await fetch(`/api/users/${id}`);
user = response.body;
} catch (error) {
console.error(error);
}
return user;
}
После Babel
//async/await
"use strict";
function loadUser(id) {
var user, response;
return regeneratorRuntime.async(function loadUser$(context$1$0) {
while (1) switch (context$1$0.prev = context$1$0.next) {
case 0:
user = undefined;
context$1$0.prev = 1;
context$1$0.next = 4;
return regeneratorRuntime.awrap(fetch("/api/users/" + id));
case 4:
response = context$1$0.sent;
user = response.body;
context$1$0.next = 11;
break;
case 8:
context$1$0.prev = 8;
context$1$0.t0 = context$1$0["catch"](1);
console.error(context$1$0.t0);
case 11:
return context$1$0.abrupt("return", user);
case 12:
case "end":
return context$1$0.stop();
}
}, null, this, [[1, 8]]);
}
немножко "не удобный" код...
===================
ПОМОГИТЕ!
Как при помощи fetch отправить POST запрос?!
я делаю так
var result = fetch('server.php?tesh=gjkhkj', {
method: 'post',
body: 'test=kosbeg&kosbeg=test'
})
result.then(function(response) {
return response.text()
}).then(function(text) {
console.log(text)
})['catch'](function(ex) { // так ['catch'], а не так .catch из-за корявого полифила...
console.log('fail')
})
}
на сервере так
<?php
print_r($_GET).'/n';
print_r($_POST).'/n';
к консоли массив $_POST пустой...
как исправить?!
Последний раз редактировалось KosBeg, 10.08.2015 в 17:43.
|
|
10.08.2015, 17:58
|
|
Профессор
|
|
Регистрация: 22.05.2015
Сообщений: 384
|
|
PS: мир сошел с ума: я использую fetch вместо православного аякса,
и я учусь писать код на es6...
проблемму решил:
var result = fetch('server.php?tesh=gjkhkj', {
method: 'post',
*!*
headers: {
"Content-type": "application/x-www-form-urlencoded; charset=UTF-8"
},
*/!*
body: 'test=kosbeg&kosbeg=test'
})
result.then(function(response) {
return response.text()
}).then(function(text) {
console.log(text)
})['catch'](function(ex) { // так ['catch'], а не так .catch из-за корявого полифила...
console.log('fail')
})
}
БЛЯ! довбаные хедеры не поставил...
|
|
10.08.2015, 18:50
|
Профессор
|
|
Регистрация: 07.08.2015
Сообщений: 154
|
|
KosBeg,
Ну и чем это лучше обычного
fetch=function(url, body){
return new Promise(function(resolve, reject){
with(new XMLHttpRequest){
open("POST", url)
send(body)
onreadystatechange=function(){
if(readyState==4){
if(status!=200) return reject(status)
resolve(responseText)
}
}
}
})
}
fetch("foo", "foo=bar&bar=baz")
.then(function(s){alert(s)})
.catch(function(s){console.log(s)})
?
|
|
10.08.2015, 19:48
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Сообщение от javaQest
|
KosBeg,
Ну и чем это лучше обычного
fetch=function(url, body){
return new Promise(function(resolve, reject){
with(new XMLHttpRequest){
open("POST", url)
send(body)
onreadystatechange=function(){
if(readyState==4){
if(status!=200) return reject(status)
resolve(responseText)
}
}
}
})
}
fetch("foo", "foo=bar&bar=baz")
.then(function(s){alert(s)})
.catch(function(s){console.log(s)})
?
|
Как минимум тем, что ты пишешь какой-то сраный код в нагрузку, а родной fetch работает уже из коробки (для старья, конечно, придется подключать полифилл, но, тем не менее, этот полифилл УЖЕ написан за тебя).
Ну, и вдобавок есть такие мелочи, как работа в строгом режиме, уместность в модульном окружении, поддержка отличных от GET запросов, поддержка установки заголовков, чтения заголовков и т.д.
Кстати, чо там с множественным наследованием и решением задачи, которую тебе Кобеззза в ответ задал?
Последний раз редактировалось Erolast, 10.08.2015 в 20:18.
|
|
10.08.2015, 20:15
|
|
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
Цитата:
|
После Babel немножко "не удобный" код...
|
А зачем ты его читаешь?) Его запускать надо.
Но, в принципе, да - без использования ES Harmony аналогичный по функциональности код выглядел бы именно так.
Цитата:
|
я использую fetch вместо православного аякса
|
Лол, а чем fetch не Asynchronous JavaScript and XML? Наверное, ты имел в виду "вместо интерфейса XMLHttpRequest"?)
Цитата:
|
// так ['catch'], а не так .catch из-за корявого полифила...
|
Полифилл тут не при чем. Дело в том, что catch - это ключевое слово, а до ES6 обращения через точку к свойствам, названных ключевым словом, было запрещено. Пропускай через babel, он будет транспиллить в скобочную нотацию там, где надо.
Цитата:
|
var result = fetch('server.php?tesh=gjkhkj', {
method: 'post',
headers: {
"Content-type": "application/x-www-form-urlencoded; charset=UTF-8"
},
body: 'test=kosbeg&kosbeg=test'
})
|
Ты как-то через задницу делаешь. Во-первых, не проще ли отправлять JSON?
fetch('server.php?tesh=gjkhkj', {
method: 'post',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
test: 'kosbeg',
kosbeg: 'test',
})
})
Во-вторых, зачем указывать кодировку UTF8 в content-type? Она же и так дефолтная.
Вобще, загляни на https://github.com/github/fetch#usage, там весьма хорошая памятка.
Последний раз редактировалось Erolast, 10.08.2015 в 20:24.
|
|
10.08.2015, 20:45
|
Профессор
|
|
Регистрация: 07.08.2015
Сообщений: 154
|
|
Сообщение от Erolast
|
Кстати, чо там с множественным наследованием и решением задачи, которую тебе Кобеззза в ответ задал?
|
седня устал, завтра занят, может на днях гляну. Мне честно говоря, читать твой код -- серпом по яйцам. Переписал бы ты его традиционным синтаксисом. Неохота мне в эти перделки вникать, тем боле я знаю, что это говно мне не нужно и никогда не будет нужно. А я мозг забивать абы чем не люблю.
|
|
|
|