Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   XMLHttpRequest - wtf? (https://javascript.ru/forum/offtopic/44704-xmlhttprequest-wtf.html)

Maxmaxmaximus7 30.01.2014 21:44

ну если ты хочешь обрабатывать брошенные api ошибки конструкцией try catch, то создавай свой класс ошибок.

Нормальный бы пасан создал класс

function ServerAPI (url){
    this.getComments = function(){ /*запрос на сервер*/ }
    this.postComment = function(text){ /*запрос на сервер*/ }
}


и оба эти метода возвращают промис обьект. у которого есть 2 метода "then" и "error". типа вот так:

var api = ServerAPI('/api.php');

api.postComment('ololo')
    .then(function(){ alert('отправлено') })
    .error(function(){ alert('ошибка') });



суть http://habrahabr.ru/post/209662/

Maxmaxmaximus7 30.01.2014 22:07

или создай класс для создания ассинхронных API к чему либо)) 'bv классом можно будет конструировать апихи ^_^

// поехали


  function API( props ) {
    /* подумай что сюда нужно написать =) тут вся магия */
  }



  var api = new API( {

    url: 'api.php',

    getComments: function( resolve, reject ) {

      var http = new XMLHttpRequest();

      http.onerror = function() {
        reject();
      };

      http.onload = function() {
        if (http.status === 200) {
          resolve();
        }
        else {
          reject();
        }
      };

      http.open( 'GET', this.url + '?comments' );
      http.send( null );
    }

  } );

Maxmaxmaximus7 30.01.2014 22:15

можно чо нить типа того намутить чтобы каждый раз не описывать создание этого обьекта запросов ^_^


var api = new API( {


    url: 'api.php',


    sendRequest: function( resolve, reject, requestParams ) {

      var http = new XMLHttpRequest();
      http.open( 'GET', this.url + '?' + requestParams );

      http.onerror = reject;
      http.onload = function() {
        http.status === 200 ? resolve() : reject();
      };

      http.send( null );
    },


    getComments: function( resolve, reject ) {
      return this.sendRequest( 'comments' ).then( resolve ).error( reject );
    }


  } );

cyber 30.01.2014 22:18

Maxmaxmaximus7, мне нужно прочитать json файл.
сделал так

function HTTPError(obj) {
        if(!obj) return;

        if(obj.hasOwnProperty("code")
            && obj.hasOwnProperty("text")) {
            obj.text = this.messages[obj.code] || obj.text;
        }

        for(var key in obj){
            if(obj.hasOwnProperty(key))
                this[key] = obj[key];
        }
    };

    HTTPError.prototype.messages = Object.create({
        "404": "Страница не найдена"
    });

pages.prototype.getFile = function(src, onload, onerror) {
      var xhr = new XMLHttpRequest();
          xhr._src = src;
          xhr.onreadystatechange = function(e){

              if(this.readyState != 4) return;

              if(xhr.status == 200) {
                  return onload.call(this, e);
              }

              onerror.call(this, new HTTPError({
                  text: this.statusText,
                  code: this.status,
                  object: this
              }), e);
          };

          xhr.open("GET", src);
          xhr.send(null);
      return xhr;
    };

Maxmaxmaximus7 30.01.2014 22:18

чтобы понять всю эту истину тебе надо прочесть ту статью про промисы и написать свой велосипед) я тоже думаю написать свой чтобы скилл поднять, хотя хер знат подымет ли, я вроде уже знаю как это все написать, не оказалось бы это пустой тратой времени

статья http://habrahabr.ru/post/209662/

Maxmaxmaximus7 30.01.2014 22:20

но ты сделал тупо, тебе придется ловить исключения а это уродливо смотрится, вся конструкция трай катч уродливая.

cyber 30.01.2014 22:23

Цитата:

Сообщение от Maxmaxmaximus7
но ты сделал тупо, тебе придется ловить исключения а это уродливо смотрится, вся конструкция трай катч уродливая.

зачем ловить? Запрос ассинхронный, а в консоль ввыведит всеравно, поэтому ловить не вижу смысла.

cyber 30.01.2014 22:34

Не могу понять что за хрень с кодировкой в js файле есть русская строка, и при попытки ее вывести получаю крякозябры, пробыл менять кодировку на 1251, не помогло, при том что в *.html все норм. wtf?

melky 30.01.2014 22:37

меняй на UTF-8

вообще, юзай везде UTF-8 и не знай проблем

cyber 30.01.2014 22:40

Цитата:

Сообщение от melky
меняй на UTF-8

вообще, юзай везде UTF-8 и не знай проблем

эм, у меня по умолчанию стояла utf-8 из за того что не работало поставил 1251, вот в чем проблема...


Часовой пояс GMT +3, время: 03:22.