XMLHttpRequest - wtf?
у XMLHttpRequest есть событие onerror, либо я чего то не в курю, либо по каким то магическим причинам оно не вызываеться при 404, тогда смысел от него если всеравно нужно обрабатывать "onloadend" ?
|
Цитата:
404 это HTTP-статус ответа не более того. Событие onerror вызывается когда происходит ошибка на сетевом уровне (не прошел коннект по причине политики безопасности, отсутствует соединение с сервером). |
Цитата:
|
Цитата:
Статус ответа сервера может быть хоть 100500, и что считать ошибкой должен только ты и никто другой. |
Цитата:
|
Цитата:
Иными словами onerror это ошибка сетевого уровня. А ты ищешь ошибку уровня приложения) а это уже твоя головушка должна её отлавливать и обрабатывать) XMLHttpRequest о ней ничего не знает) он не знает что это ошибка) То что ты спросил это то же самое что спросить "почему XMLHttpRequest не отлавливает ошибку ведь пользователь с таким именем уже существует)?" я бы тебе рекомендовал для работы с сервером написать свой обьект) который бы генерировао ошибки повыше уромнем. у него были бы методы, промисы и прочее) ну ты пони. работа с api серевра на уровне приложения |
Цитата:
|
ты пони
|
Цитата:
|
Maxmaxmaximus7, не могу найти, в js есть свой класс ошибок что типо HttpError или самому нужно замутить?)
|
ну если ты хочешь обрабатывать брошенные 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/ |
или создай класс для создания ассинхронных 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 );
}
} );
|
можно чо нить типа того намутить чтобы каждый раз не описывать создание этого обьекта запросов ^_^
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 );
}
} );
|
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;
};
|
чтобы понять всю эту истину тебе надо прочесть ту статью про промисы и написать свой велосипед) я тоже думаю написать свой чтобы скилл поднять, хотя хер знат подымет ли, я вроде уже знаю как это все написать, не оказалось бы это пустой тратой времени
статья http://habrahabr.ru/post/209662/ |
но ты сделал тупо, тебе придется ловить исключения а это уродливо смотрится, вся конструкция трай катч уродливая.
|
Цитата:
|
Не могу понять что за хрень с кодировкой в js файле есть русская строка, и при попытки ее вывести получаю крякозябры, пробыл менять кодировку на 1251, не помогло, при том что в *.html все норм. wtf?
|
меняй на UTF-8
вообще, юзай везде UTF-8 и не знай проблем |
Цитата:
|
Цитата:
мета тег с кодировкой проставлен? |
Цитата:
|
Цитата:
|
Цитата:
|
melky, решил проблему, нужно было установить utf-8 без BOM, в phpstorm не было такого варианта, пришлось через sublime text
|
Цитата:
|
не только в notepad++, сразу не нашел:)
|
cyber, я тебе описываю как органиховать общение между сервером и клиентом, и как это делают отцы. а не то как чо то там ловить и катчить. ты показал пример и спросил "норм?" я сказал "нет, отцы делают вот так" и показал server api и на фьючерсах.
Цитата:
|
Цитата:
Цитата:
|
кто то говорит тебе писать велик чтобы прочитать json файл?
|
Maxmaxmaximus7, ты же скидывал ссылку на then, я знаю про него но с учетом поддержки и того что прийдеться фолбечить, то лучше использовать то что есть.
|
cyber, ты вообще о чем? ты прислал пример того как ты сделал, спросил нормально? я говорю нет - говно. если ты просто собираешься прочесть json то блять это делается так:
new xhr = new XHR();
xhr.open('GET', 'file.json');
xhr.send(null);
xhr.onload = function(){
if(this.status !== 200) throw 'алярма блять';
/*читаем файл*/
}
|
Цитата:
Цитата:
|
Цитата:
|
Цитата:
|
окей, тогда так, ты выложил что-то на обзор общественности, общественность обсуждает) проблемы?
|
Цитата:
|
Цитата:
|
| Часовой пояс GMT +3, время: 20:16. |