За последние 24 часа нас посетили 20302 программиста и 1711 роботов. Сейчас ищут 1899 программистов ...

TypeError: a is undefined

Тема в разделе "JavaScript и AJAX", создана пользователем Freakmeister, 29 апр 2015.

  1. Freakmeister

    Freakmeister Активный пользователь

    С нами с:
    20 дек 2009
    Сообщения:
    888
    Симпатии:
    5
    Делаю простой AJAX запрос. Если переменная Field = 'date', то всё работает. Если ставлю 'pay_date', то вылазит эта ошибка.

    [​IMG]

    В чём проблема? В символе нижнего подчеркивания?

    Код (Text):
    1.     var Field = 'pay_date';
    2.    
    3.     $.ajax({
    4.         type: 'POST',
    5.         cache: false,
    6.         url: '/wp-content/plugins/mfunny-cabs/ajax.php',
    7.         dataType: 'json',
    8.         data: {
    9.             'ajaxing':'get_events',
    10.             'mode':encodeURIComponent(Mode),
    11.             'view':encodeURIComponent(View),
    12.             'month':encodeURIComponent(Month),
    13.             'year':encodeURIComponent(Year),
    14.             'field':encodeURIComponent(Field)
    15.         },
    16.         success: function(result) {
    17.             // do stuff
    18.         },
    19.         error: function(result){
    20.             alert('Error: '+result['status']+': '+result['responseText']);
    21.         }
    22.     });
     
  2. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    undefined что значит?
     
  3. Freakmeister

    Freakmeister Активный пользователь

    С нами с:
    20 дек 2009
    Сообщения:
    888
    Симпатии:
    5
    Мне больше интересно что "а" значит. И почему ошибка возникает в jQuery, а не в моём скрипте. У меня никаких undefined точно нет.

    Если сделать это:

    Код (Text):
    1. alert('ajaxing=get_events&mode='+encodeURIComponent(Mode)+'&view='+encodeURIComponent(View)+'&month='+encodeURIComponent(Month)+'&year='+encodeURIComponent(Year)+'&field='+encodeURIComponent(Field));
    То вернётся это:

    Код (Text):
    1. ajaxing=get_events&mode=new&view=new&month=4&year=2015&field=pay_date
     
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    У тебя точно нет такой переменной нигде, не?
    Потому что именно там происходит попытка обращения к несуществующей переменной по какой-то причине. Место, куда указывает ошибка не есть место, ошибку провоцирующее.

    var a = 10;
    var b = undefined;//по любой причине
    var c = a/b; //АШИПКА! Хотя код верный, выражение логичное. Просто b не должно быть undefined.
     
  5. Freakmeister

    Freakmeister Активный пользователь

    С нами с:
    20 дек 2009
    Сообщения:
    888
    Симпатии:
    5
    Нет, я не использую такие короткие переменные нигде.
     
  6. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Код (Text):
    1.       success: function(result) {
    2.          // do stuff
    3.       },
    у вас так и выглядит в боевом варианте на котором тестируете и в теле функции только комментарий?
     
  7. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    А чем отличаются результаты запроса в зависимости от значения field?
    Покажи и то и то.
     
  8. Freakmeister

    Freakmeister Активный пользователь

    С нами с:
    20 дек 2009
    Сообщения:
    888
    Симпатии:
    5
    Да, ты прав, ошибка глубже, дело в пришедшем ответе. Вот ответ с полем 'date':

    Код (Text):
    1. result {
    2.     'array': {
    3.         14: 9
    4.     },
    5.     error: 0
    6. }
    А с 'pay_date' в базе просто нет подходящих значений, php возвращает пустой массив:

    Код (Text):
    1. result {
    2.     'array': {
    3.     },
    4.     error: 0
    5. }
    Я пытаюсь сразу этот массив крутить через $each в функции success, чем и вызываю ошибку. Добавил проверку, теперь JS не падает:

    Код (Text):
    1. if (result['array']) {
    2.     $.each(result['array'], function(Key, value){
    3.         // крутим
    4.     }
    5. }
     
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    [​IMG]
     
  10. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Freakmeister в хроме можно посмотреть в какой строке произошла ошибка и даже отладить значение этой переменной, сжатый jquery сложно читать, можно загрузить не сжатые исходники или в хроме где смотришь скрипт нажать на кнопку { } и код станет с форматированием
     
  11. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Это не имеет смысла, если имеем ошибку вида:

    В данном случае ошибка происходила в недрах JQuery. Но не по вине JQuery, а по вине битых входящих данных. Это ведь не повод ковырять работающую отлаженную библиотеку, верно? А пытаться в ее макаронах ставить брейкпоинты - гиблое дело.

    JQuery - отлаженный модуль. Бери за базис утверждение, что в нем ошибок нет. Значит их нужно искать до нее. Значит нужно искать разницу между вызовами. Разница только в значении переменной для AJAXа. Но в одном случае работает, в другом нет. Значит, дело не в самом значении, а в том, что оно меняет. В данном случае - это ответ сервера. И...бинго!