2017-07-15 83 views
1

我想尝试通过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)); 
+0

检查通知功能没有回调,这是我可以看到的唯一的问题 –

+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); 
    }); 
}); 

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

+0

如果我在check_notification上添加完成,它是一样的吗? –

+0

如果你使用上面的确切代码,它仍然会提示'undefined'?你是否从服务器返回JSON – adeneo

+0

是的,我从服务器返回json –

相关问题