JavaScript函数没有定义?

时间:2011-03-14 15:00:24

标签: javascript

出于某种原因,Firefox在这篇JS中抛出了“函数未定义”错误:

    $(function() { // on document ready

function updateAlerts() {
   $.ajax({
      url : "/check.php",
      type : "POST",
      data : {
         method : 'checkAlerts'
      },
      success : function(data, textStatus, XMLHttpRequest) {
         var response = $.parseJSON(data);

         // Update the DOM to show the new alerts!
         if (response.friendRequests > 0) {
            // update the number in the DOM and make sure it is visible...
            $('#notifications').show().text(response.friendRequests);
         }
         else {
            // Hide the number, since there are no pending friend requests or messages
            var ablanknum = '0';
            $('#notifications').show().text(ablanknum);
         }

      }
   });
}

function friendRequestAlert() {
   $.ajax({
      url : "/check.php",
      type : "POST",
      data : {
         method : 'sendFriendAlert'
      },
      success : function(data, textStatus, XMLHttpRequest) {
         var response = $.parseJSON(data);

         if (response.theFRAlert !== '0') {
            // Display our fancy Javascript notification.
            $.jgrowl('' + response.theFRAlert + '');
         }

      }
   });
}

function messageAlert() {
   $.ajax({
      url : "/check.php",
      type : "POST",
      data : {
         method : 'sendMessageAlert'
      },
      success : function(data, textStatus, XMLHttpRequest) {
         var response = $.parseJSON(data);

         if (response.theAlert !== '0') {
            // Display our fancy Javascript notification.
            $.jgrowl('' + response.theAlert + '');
            $('#therearemessages').show().text(response.theAlert);
         }

      }
   });
}

});

我查看了我的代码,似乎没有任何错误。

2 个答案:

答案 0 :(得分:4)

javascript中的范围是基于功能的。

由于您在DOMready上运行的函数内定义了3个函数,然后超出了范围,函数也是如此。

换句话说:3个函数只存在于DOmready函数中,你不能在函数之外的任何其他地方使用它们。

答案 1 :(得分:4)

没有理由将3个函数包装在文档就绪包装器中 - 这些函数内部没有任何内容(可能依赖于文档已准备好),直到调用它们为止。此外,通过将它们包装在doc准备就绪中,您将强制它们进入该anon函数的范围,并且不能从它外部使用它们。

不相关,您应该在$ .ajax调用上将dataType设置为'json',并停止对$ .parseJSON进行手动调用。

新代码:

function updateAlerts()
{
    $.ajax( {
        url: '/check.php',
        type: 'POST',
        data: {
            method: 'checkAlerts'
        },
        dataType: 'json',
        success: function( response )
        {
            // Update the DOM to show the new alerts!
            if( response.friendRequests > 0 )
            {
                // update the number in the DOM and make sure it is visible...
                $( '#notifications' ).show().text( response.friendRequests );
            }
            else
            {
                // Hide the number, since there are no pending friend requests or messages
                var ablanknum = '0';
                $( '#notifications' ).show().text( ablanknum );
            }
        }
    } );
}

function friendRequestAlert()
{
    $.ajax( {
        url: '/check.php',
        type: 'POST',
        data: {
            method: 'sendFriendAlert'
        },
        dataType: 'json',
        success: function( response )
        {
            if( response.theFRAlert !== '0' )
            {
                // Display our fancy Javascript notification.
                $.jgrowl('' + response.theFRAlert + '');
            }
        }
    } );
}

function messageAlert()
{
    $.ajax( {
        url: '/check.php',
        type : 'POST',
        data: {
            method : 'sendMessageAlert'
        },
        dataType: 'json',
        success: function( response )
        {
            if( response.theAlert !== '0' )
            {
                // Display our fancy Javascript notification.
                $.jgrowl('' + response.theAlert + '');
                $('#therearemessages').show().text(response.theAlert);
            }
        }
    } );
}