dmitry111,
Моя ошибка - не написал для чего все это. Для того чтобы отправить сведения об ошибке на сервер для логирования. То есть я пишу в коде triggerError('ошибка!') и все. Дальше я хочу чтобы эта функция передала на сервер не только текст ошибки, но и файл/строку, где была вызвана. Цитата:
Цитата:
|
|
Hapson, тебе не ошибки нужны, а пользовательские события. Можешь использовать
Цитата:
Observer, CustomEvent, ... |
dmitry111, передать не проблема, тема о trigger_event, проблема в том, что dispatchить свою ошибку не получается.
|
dmitry111,
я уже переопределил window.onerror и написал функционал отправки/логирования. Теперь нужно написать функцию-аналог trigger_error из php. Вот что есть
(function(){window.onerror = ErrorHandler;
/*** SETTING ***/
var url = window.location.protocol +"//"+ window.location.hostname +"/phpHandlerJSError.php";
var debug = true;
var serverLog = true;
function ErrorHandler(message, file, line){
if(!!serverLog){sendError(message, file, line);}
return !!debug ? false : true;
}
function sendError(message, file, line){
var xhr = getXHR();
var param = "message="+ encodeURIComponent(message) +"&";
param += "file="+ encodeURIComponent(file) +"&";
param += "line="+ encodeURIComponent(line);
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.setRequestHeader("HTTP_X_FORWARDED_FOR", "XmlHttpRequest");
/* tmp */
xhr.onreadystatechange = function(){
if(xhr.readyState == 4 && xhr.status == 200){
alert(xhr.responseText);
}
};
xhr.send(param);
}
function getXHR(){
try{return new XMLHttpRequest();}catch(e){}
try{return new ActiveXObject("Msxml2.XMLHTTP.3.0");}catch(er){}
throw new Error("This browser does not support XMLHttpRequest");
}
}());
При ошибке сработает ErrorHandler. В дополнение к этому нужна функция, которая будет сама узнавать в каком файле и на какой строке ее вызвали. То есть, в каком-то участке кода я ожидаю, что что-то может пойти не так. Я не хочу оборачивать этот участок кода в try...catch, ради того чтобы в try по условию бросить исключение. Я хочу просто вызвать некий triggerError('ошибка') и продолжить выполнение. triggerError должен определить файл и строку, где его вызвали и вместе с ошибкой передаст это все в ErrorHandler, который и отправит все это на сервер |
Цитата:
|
nerv_,
что-то я не догоню, как при помощи observer такое реализовать..? |
Цитата:
|
Цитата:
try {
setTimeout(function() {
foo();
}, 1000)
} catch(e) {
alert(1); // will not work
}
window.onerror = function(e) {
alert(2);
};
Цитата:
Octane, он просто ерундой страдает :) Не хочет слушать, что советуют) Hapson, ща америку для тебя открою:
var app = {
error: function(e) {
alert(1)
}
};
app.error();
Читай про ООП. |
nerv_,
Пиши по делу, ладно? Мне нужно, чтобы при вызове определенной функции, эта функция узнала, в каком файле и на какой строке ее вызвали. В php это выглядит так
<?php
function ErrorHandler($number, $message, $file, $line, $context){
/* обработка ошибки */
}
set_error_handler('ErrorHandler');
// и теперь...
trigger_error('ошибка');
// в ErrorHandler будет передан текст ошибки, файл и строка, где был вызван trigger_error, код ошибки и контекст.
?>
|
| Часовой пояс GMT +3, время: 13:00. |