Добрый день и сразу извинюсь, если вдруг продублировал вопрос, однако ответа совсем не нашел. Сразу суть проблемы:
<script>
$(document).ready(function(){
$('#create1').click(function(){
$.ajax({
url: "create1.php",
cache: false,
success: function(html){
$("#mainContent").html(html);
}
});
});
$('#create2').click(function(){
$.ajax({
url: "create2.php",
cache: false,
success: function(html){
$("#mainContent").html(html);
}
});
});
$('#tasks').click(function(){
$.ajax({
url: "tasks.php",
cache: false,
success: function(html){
$("#mainContent").html(html);
}
});
});
$('#msg').click(function(){
$.ajax({
url: "msg.php",
cache: false,
success: function(html){
$("#mainContent").html(html);
}
});
});
function messageChecking() {
$.ajax({
url: '/msgcheck.php',
type: 'POST',
success: function(response) {
alert('Script is running!');
result = jQuery.parseJSON(response);
if(result.countmsg != <?php echo $cc; ?>)
{
document.getElementById("countmsg").innerHTML = "Cообщения ("+result.countmsg+")";
var audio = new Audio();
audio.src = 'notify.mp3';
audio.autoplay = true;
}
Timer()
}
})
}
function Timer() {
setTimeout('messageChecking()', 1000);
}
Timer();
});
проблема: Uncaught ReferenceError: messageChecking is not defined at anonymous:1:1
Все остальное, кроме функции таймера, которую вычитал здесь работает, но эту функцию своими руками вставить не смог. Как разобраться?
Замените
setTimeout('messageChecking()', 1000);
на
setTimeout(function() {
messageChecking();
}, 1000);
Если передавать имя функции строкой - то интерпретатор js будет искать эту функцию в глобальной области видимости, вот пример:
function bar(a) {
alert("глобально "+a)
}
function foo() {
function bar(a) {
alert("внутри foo "+a)
}
function timer1() {
setTimeout(function() {
bar('вызвано из timer1')
}, 1000)
}
function timer2() {
setTimeout("bar('вызвано из timer2')", 1000)
}
timer1()
timer2()
}
foo()
Смотрите, при вызове setTimeout("bar('вызвано из timer2')" - внутренняя функция bar не находится, находится только глобальная, однако при вызове из функции - внутренняя bar будет найдена.
Потеря контекста происходит из за того, что при использовании строки с вызовом ф-и у нас создается новый объект Function и в его конструктор передается эта строка. Scope этого объекта по умолчанию - window, соответственно внутренняя ф-я не видна.
Почему не стоит использовать
setTimeout(messageChecking, 1000);
Если вы захотите передать аргументы внутрь функции вам придется указать их как аргументы для setTimeout:
setTimeout(messageChecking, 1000, arg1, arg2);
Для того что бы обработать такой код javascript внутри себя будет использовать медленную ф-ю apply, как итог - потеря производительности.
setTimeout('messageChecking()', 1000);
setTimeout(messageChecking, 1000);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Привет друзья я начинающий в сфере php и хочу писать свой движок на php oop так вот для начала не могу найти материал верене не могу сформировать...