Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 09.08.2015, 17:58
Аватар для EmperioAf
Профессор
Отправить личное сообщение для EmperioAf Посмотреть профиль Найти все сообщения от EmperioAf
 
Регистрация: 15.01.2015
Сообщений: 622

Сообщение от Erolast
система кармы тут, по меньшей мере, странная
ОФФТОП:
На астрофоруме повторно + можно ставить только через 72 часа. Мне кажется было бы разумно
Ответить с цитированием
  #12 (permalink)  
Старый 09.08.2015, 21:35
Аватар для KosBeg
Профессор
Отправить личное сообщение для KosBeg Посмотреть профиль Найти все сообщения от KosBeg
 
Регистрация: 22.05.2015
Сообщений: 384

Сообщение от Safort
Повторно можно поставить плюс только после того, как несколько раз другим изменишь карму.
если уточнить после пятого раза изменения кармы другому)
я как-то одному челу карму дрочил, только три раза минусанул, потом психанул
Ответить с цитированием
  #13 (permalink)  
Старый 09.08.2015, 21:39
Аватар для KosBeg
Профессор
Отправить личное сообщение для KosBeg Посмотреть профиль Найти все сообщения от KosBeg
 
Регистрация: 22.05.2015
Сообщений: 384

И по теме - а чем промисы(не называйте их обещаниями, не трахайте мой девственный мозг)))) так не удобны? - http://learn.javascript.ru/promise
Ответить с цитированием
  #14 (permalink)  
Старый 10.08.2015, 09:17
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 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);    
        });
    });
}


И это простейший пример, без нескольких поочередных запросов и без циклов.
Ответить с цитированием
  #15 (permalink)  
Старый 10.08.2015, 17:40
Аватар для KosBeg
Профессор
Отправить личное сообщение для KosBeg Посмотреть профиль Найти все сообщения от KosBeg
 
Регистрация: 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.
Ответить с цитированием
  #16 (permalink)  
Старый 10.08.2015, 17:58
Аватар для KosBeg
Профессор
Отправить личное сообщение для KosBeg Посмотреть профиль Найти все сообщения от KosBeg
 
Регистрация: 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')
      })
}

БЛЯ! довбаные хедеры не поставил...
Ответить с цитированием
  #17 (permalink)  
Старый 10.08.2015, 18:50
Профессор
Посмотреть профиль Найти все сообщения от javaQest
 
Регистрация: 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)})

?
Ответить с цитированием
  #18 (permalink)  
Старый 10.08.2015, 19:48
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 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.
Ответить с цитированием
  #19 (permalink)  
Старый 10.08.2015, 20:15
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 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.
Ответить с цитированием
  #20 (permalink)  
Старый 10.08.2015, 20:45
Профессор
Посмотреть профиль Найти все сообщения от javaQest
 
Регистрация: 07.08.2015
Сообщений: 154

Сообщение от Erolast
Кстати, чо там с множественным наследованием и решением задачи, которую тебе Кобеззза в ответ задал?
седня устал, завтра занят, может на днях гляну. Мне честно говоря, читать твой код -- серпом по яйцам. Переписал бы ты его традиционным синтаксисом. Неохота мне в эти перделки вникать, тем боле я знаю, что это говно мне не нужно и никогда не будет нужно. А я мозг забивать абы чем не люблю.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
События клик. Почему так происходит. Evgeny_Dedov jQuery 4 04.11.2013 01:34
Объясните не могу понять почему так происходит cha0s jQuery 3 23.10.2013 12:52
обясните плз почему мой SetInterval так странно себя ведет? Влад31/08/2000 Ваши сайты и скрипты 2 29.09.2013 17:14
Объясните, почему так происходит ak-o jQuery 12 12.07.2013 12:32
Извините что создаю еще одну тему, но мне нужна помощь и ваше мнение megaupload Оффтопик 11 27.05.2013 12:58