Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   генерация и логирование ошибки (https://javascript.ru/forum/misc/46253-generaciya-i-logirovanie-oshibki.html)

Hapson 03.04.2014 13:41

dmitry111,
Моя ошибка - не написал для чего все это.
Для того чтобы отправить сведения об ошибке на сервер для логирования.
То есть я пишу в коде triggerError('ошибка!') и все. Дальше я хочу чтобы эта функция передала на сервер не только текст ошибки, но и файл/строку, где была вызвана.
Цитата:

Сообщение от dmitry111
он наверно и не знает что в браузерах встрена консоль ошибок

смешно, смешно... :)
Цитата:

Сообщение от dmitry111
Мне ее как раз и не хватает при работе с сервером

плагин для NPP + плагин для FF/Chrome = пошаговое выполнение php с просмотром переменных в консоли NPP

dmitry111 03.04.2014 14:07

думаю вам сюда

http://javascript.ru/blog/azriman/se...bok-javascript

nerv_ 03.04.2014 14:26

Hapson, тебе не ошибки нужны, а пользовательские события. Можешь использовать
Цитата:

Сообщение от Octane
CustomEvent

, а можешь написать свою реализацию.

Observer, CustomEvent, ...

Octane 03.04.2014 14:29

dmitry111, передать не проблема, тема о trigger_event, проблема в том, что dispatchить свою ошибку не получается.

Hapson 03.04.2014 14:31

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, который и отправит все это на сервер

Octane 03.04.2014 14:34

Цитата:

Сообщение от Hapson
getXHR

ты чо для IE6 чтоли делаешь?

Hapson 03.04.2014 14:37

nerv_,
что-то я не догоню, как при помощи observer такое реализовать..?

Hapson 03.04.2014 14:39

Цитата:

Сообщение от Octane (Сообщение 305836)
ты чо для IE6 чтоли делаешь?

Пусть будет... несколько лишних строчек - не страшно

nerv_ 03.04.2014 14:44

Цитата:

Сообщение от Hapson
Я не хочу оборачивать этот участок кода в try...catch, ради того чтобы в try по условию бросить исключение.

не поймаешь
try {
    setTimeout(function() {
        foo();
    }, 1000)
} catch(e) {
    alert(1); // will not work
}

window.onerror = function(e) {
    alert(2);
};

Цитата:

Сообщение от Hapson
Я хочу просто вызвать некий triggerError('ошибка') и продолжить выполнение

см. мой ответ выше

Octane, он просто ерундой страдает :) Не хочет слушать, что советуют)

Hapson, ща америку для тебя открою:
var app = {
   error: function(e) {
       alert(1)
   }
};

app.error();

Читай про ООП.

Hapson 03.04.2014 15:02

nerv_,
Пиши по делу, ладно?
Мне нужно, чтобы при вызове определенной функции, эта функция узнала, в каком файле и на какой строке ее вызвали.
В php это выглядит так
<?php
function ErrorHandler($number, $message, $file, $line, $context){
    /* обработка ошибки */
}
set_error_handler('ErrorHandler');

// и теперь...

trigger_error('ошибка');
// в ErrorHandler будет передан текст ошибки, файл и строка, где был вызван trigger_error, код ошибки и контекст.
?>


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