为什么我点击我的按钮时会得到不确定?

时间:2017-07-15 20:54:02

标签: javascript jquery

我想尝试通过ajax显示我的通知json,但是当我第一次尝试显示未定义时,然后告诉我我的json我做错了什么?

$(function (doc, win, $) {
    var notification = win.Notification || win.mozNotification || win.webkitNotification;
    var $badge = $("#notifications-badge");
    var $list = $("#notifications-list");
    var $button = $("#notifications-button");
    URL_GET_NOTIFICATION = BASE_URL + 'notifications/getNotification';

    function check_notifications() {
        $.ajax({
            type: 'GET',
            url: URL_GET_NOTIFICATION,
            //data: { timestamp : timestamp },
            dataType: 'json',
            async: true,
            success: function (data) {
                console.log(data);
            }
        });
    }

   $button.click(function (e) {
      alert(check_notifications());
   });

}(document, window, jQuery));

1 个答案:

答案 0 :(得分:1)

所有函数在调用时默认返回undefined,除非指定了其他内容。

你只需

即可



function go() {};

alert( go() ); // undefined




这基本上就是你正在做的事情,警告一个没有返回任何东西的功能。

如果你从函数中返回一些内容,它就会起作用



function go() { return 'Hello Kitty' };

alert( go() ); // Hello Kitty




但是 ,因为你在函数中使用ajax,你无法真正从中返回结果,因为它异步并在返回结果后执行一段时间。

您必须使用回调或承诺才能使其正常运行。

function check_notifications() {
    return $.ajax({
        type: 'GET',
        url: URL_GET_NOTIFICATION,
        //data: { timestamp : timestamp },
        dataType: 'json'
    });
}

$button.click(function (e) {
   check_notifications().done(function(data) {
      alert(data);
   });
});

作为旁注,在调试时使用控制台,而不是警报。