Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 30.01.2014, 20:44
Профессор
Посмотреть профиль Найти все сообщения от Maxmaxmaximus7
 
Регистрация: 08.01.2014
Сообщений: 354

ну если ты хочешь обрабатывать брошенные 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 в 20:51.
Ответить с цитированием
  #12 (permalink)  
Старый 30.01.2014, 21:07
Профессор
Посмотреть профиль Найти все сообщения от Maxmaxmaximus7
 
Регистрация: 08.01.2014
Сообщений: 354

или создай класс для создания ассинхронных 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 в 21:09.
Ответить с цитированием
  #13 (permalink)  
Старый 30.01.2014, 21:15
Профессор
Посмотреть профиль Найти все сообщения от Maxmaxmaximus7
 
Регистрация: 08.01.2014
Сообщений: 354

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


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 );
    }


  } );
Ответить с цитированием
  #14 (permalink)  
Старый 30.01.2014, 21:18
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 16.12.2011
Сообщений: 4,415

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;
    };
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #15 (permalink)  
Старый 30.01.2014, 21:18
Профессор
Посмотреть профиль Найти все сообщения от Maxmaxmaximus7
 
Регистрация: 08.01.2014
Сообщений: 354

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

статья http://habrahabr.ru/post/209662/
Ответить с цитированием
  #16 (permalink)  
Старый 30.01.2014, 21:20
Профессор
Посмотреть профиль Найти все сообщения от Maxmaxmaximus7
 
Регистрация: 08.01.2014
Сообщений: 354

но ты сделал тупо, тебе придется ловить исключения а это уродливо смотрится, вся конструкция трай катч уродливая.
Ответить с цитированием
  #17 (permalink)  
Старый 30.01.2014, 21:23
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 16.12.2011
Сообщений: 4,415

Сообщение от Maxmaxmaximus7
но ты сделал тупо, тебе придется ловить исключения а это уродливо смотрится, вся конструкция трай катч уродливая.
зачем ловить? Запрос ассинхронный, а в консоль ввыведит всеравно, поэтому ловить не вижу смысла.
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #18 (permalink)  
Старый 30.01.2014, 21:34
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 16.12.2011
Сообщений: 4,415

Не могу понять что за хрень с кодировкой в js файле есть русская строка, и при попытки ее вывести получаю крякозябры, пробыл менять кодировку на 1251, не помогло, при том что в *.html все норм. wtf?
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
  #19 (permalink)  
Старый 30.01.2014, 21:37
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

меняй на UTF-8

вообще, юзай везде UTF-8 и не знай проблем
Ответить с цитированием
  #20 (permalink)  
Старый 30.01.2014, 21:40
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 16.12.2011
Сообщений: 4,415

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

вообще, юзай везде UTF-8 и не знай проблем
эм, у меня по умолчанию стояла utf-8 из за того что не работало поставил 1251, вот в чем проблема...
__________________
Цитата:
Если ограничения и условия описываются как "коробка", то хитрость в том что бы найти именно коробку... Не думайте о чем то глобальном - найдите коробку.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запрос на другой сайт XMLHttpRequest vscorpion Internet Explorer 9 24.12.2013 15:46
Доработать скрипт (нужно знать XMLHTTPRequest) DeL Esprit Работа 3 29.03.2013 23:46
xmlHttpRequest подскажите czp AJAX и COMET 4 10.12.2012 22:23
XMLHttpRequest status=0, хотя запрос проходит. arigasa AJAX и COMET 4 15.02.2011 20:14
Создание и уничтожение XMLHttpRequest Vlas AJAX и COMET 9 22.05.2009 12:38