Консоль говорит об ошибке notify.js:17 Uncaught TypeError

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО

InstantCMS 2

#1 14 августа 2016 в 05:59
Консоль сообщает об ошибке Uncaught TypeError: Cannot read property 'success' of null — notify.js:17

В файле в 17 (здесь 1-я) строке следующий код:
  1. if (!data.success){
  2.  
  3. $('#chatAudio')[0].play();
  4.  
  5. $.each(data.result, function(i, j) {
  6.  
  7. $.jGrowl(j.name, { theme: 'notify_message Left', header: title, life: life, speed: speed, sticky: sticky, position: position } );
  8.  
  9. var $button = $('li.messages-counter');
  10. $('.counter', $button).remove();
  11. if (j.num > 0) {
  12. var html = '<span class="counter">' + j.num + '</span>';
  13. $('a', $button).append(html);
  14. }
  15.  
  16. });
Помогите решить проблему. Заранее спасибо
#2 14 августа 2016 в 09:21
Покажите весь код.Под споллер только, если большой.Что это у вас, уведомление?
#3 14 августа 2016 в 16:25


Покажите весь код.Под споллер только, если большой.Что это у вас, уведомление?

Lora
Да, это дополнение уведомление как ВК, автор почему то не отвечает на сообщения.

  1. var icms = icms || {};
  2.  
  3. icms.notify = (function ($) {
  4.  
  5. this.getMessages = function(user_id, title, life, speed, sticky, position, avatar, update_limit)
  6. {
  7.  
  8. setInterval(
  9. function(){
  10. $.post('/notify/messages', {
  11. user_id: user_id,
  12. avatar: avatar
  13. },
  14.  
  15. function(data){
  16.  
  17. if (!data.success){
  18.  
  19. $('#chatAudio')[0].play();
  20.  
  21. $.each(data.result, function(i, j) {
  22.  
  23. $.jGrowl(j.name, { theme: 'notify_message Left', header: title, life: life, speed: speed, sticky: sticky, position: position } );
  24.  
  25. var $button = $('li.messages-counter');
  26. $('.counter', $button).remove();
  27. if (j.num > 0) {
  28. var html = '<span class="counter">' + j.num + '</span>';
  29. $('a', $button).append(html);
  30. }
  31.  
  32. });
  33.  
  34. }
  35.  
  36. }, "json");
  37. }, update_limit);
  38.  
  39. }
  40.  
  41. return this;
  42.  
  43. }).call(icms.notify || {},jQuery);
#4 14 августа 2016 в 16:36
Ошибка обычная, тип переменной data undefined, а у undefined методов быть не может. Весь код выложите.
#5 14 августа 2016 в 16:39
А у элемента data свойство success выше по коду определено? Это же js, а не php… Здесь надо
  1. if(typeof data.success === 'undefined'){...}
#6 14 августа 2016 в 16:57
Странник, будет ошибка все равно, нельзя проверять несуществующий метод переменной типа undefined. Тут бы понять смысл этих строк, так-то можно просто объявить переменную и условие будет исполняться всегда, выдавая ошибку на data.result.
#7 14 августа 2016 в 17:07


Ошибка обычная, тип переменной data undefined, а у undefined методов быть не может. Весь код выложите.

Джехутимери
Весь код в сообщении выше под спойлером
#8 14 августа 2016 в 17:11
Вам ничего не возвращается с сервера, надо уже php смотреть.
#9 15 августа 2016 в 11:19
Попробуйте вместоif (!data.success){ написать if(data.error == false) {, если всё что ниже должно выполнятся в случае отсутствия сообщения или if(data.error == true) {, если наоборот.
#10 15 августа 2016 в 16:11


Попробуйте вместоif (!data.success){ написать if(data.error == false) {, если всё что ниже должно выполнятся в случае отсутствия сообщения или if(data.error == true) {, если наоборот.

Lora
Не помогло
#11 15 августа 2016 в 16:43
В дополнениях нашел эту разработку. На демо есть тоже эта ошибка.
Как и было сказано — посылается post, ничего не возвращается с сервера, data пуста, идет обращение к несуществующему методу, вываливается ошибка. Поскольку все это навешенно на setInterval без проверки авторизирован ли пользователь, Вы получаете ошибку.
Быстрый фикс, вернее костыль, это в теле response-функции делать проверку data, а именно:

  1.  
  2. var icms = icms || {};
  3.  
  4. icms.notify = (function($) {
  5.  
  6. this.getMessages = function(user_id, title, life, speed, sticky, position, avatar, update_limit) {
  7.  
  8. setInterval(
  9. function() {
  10. $.post('/notify/messages', {
  11. user_id: user_id,
  12. avatar: avatar
  13. },
  14.  
  15. function(data) {
  16.  
  17. if (data) {
  18.  
  19. if (!data.success) {
  20.  
  21. $('#chatAudio')[0].play();
  22.  
  23. $.each(data.result, function(i, j) {
  24.  
  25. $.jGrowl(j.name, {
  26. theme: 'notify_message Left',
  27. header: title,
  28. life: life,
  29. speed: speed,
  30. sticky: sticky,
  31. position: position
  32. });
  33.  
  34. var $button = $('li.messages-counter');
  35. $('.counter', $button).remove();
  36. if (j.num > 0) {
  37. var html = '<span class="counter">' + j.num + '</span>';
  38. $('a', $button).append(html);
  39. }
  40.  
  41. });
  42.  
  43. }
  44.  
  45. }
  46.  
  47. }, "json");
  48. }, update_limit);
  49.  
  50. }
  51.  
  52. return this;
  53.  
  54. }).call(icms.notify || {}, jQuery);
  55.  
Разработчику же нужно доработать данное расширение, ибо посылать постоянно запрос на сервер в условиях невозможности его исполнения по крайней мере неразумно.
#12 15 августа 2016 в 18:51


В дополнениях нашел эту разработку. На демо есть тоже эта ошибка.
Как и было сказано — посылается post, ничего не возвращается с сервера, data пуста, идет обращение к несуществующему методу, вываливается ошибка. Поскольку все это навешенно на setInterval без проверки авторизирован ли пользователь, Вы получаете ошибку.
Быстрый фикс, вернее костыль, это в теле response-функции делать проверку data, а именно:

  1.  
  2. var icms = icms || {};
  3.  
  4. icms.notify = (function($) {
  5.  
  6. this.getMessages = function(user_id, title, life, speed, sticky, position, avatar, update_limit) {
  7.  
  8. setInterval(
  9. function() {
  10. $.post('/notify/messages', {
  11. user_id: user_id,
  12. avatar: avatar
  13. },
  14.  
  15. function(data) {
  16.  
  17. if (data) {
  18.  
  19. if (!data.success) {
  20.  
  21. $('#chatAudio')[0].play();
  22.  
  23. $.each(data.result, function(i, j) {
  24.  
  25. $.jGrowl(j.name, {
  26. theme: 'notify_message Left',
  27. header: title,
  28. life: life,
  29. speed: speed,
  30. sticky: sticky,
  31. position: position
  32. });
  33.  
  34. var $button = $('li.messages-counter');
  35. $('.counter', $button).remove();
  36. if (j.num > 0) {
  37. var html = '' + j.num + '';
  38. $('a', $button).append(html);
  39. }
  40.  
  41. });
  42.  
  43. }
  44.  
  45. }
  46.  
  47. }, "json");
  48. }, update_limit);
  49.  
  50. }
  51.  
  52. return this;
  53.  
  54. }).call(icms.notify || {}, jQuery);
  55.  
Разработчику же нужно доработать данное расширение, ибо посылать постоянно запрос на сервер в условиях невозможности его исполнения по крайней мере неразумно.

Джехутимери

Огромное вам спасибо, теперь консоль не ругается
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.