Делаю простой AJAX запрос. Если переменная Field = 'date', то всё работает. Если ставлю 'pay_date', то вылазит эта ошибка. В чём проблема? В символе нижнего подчеркивания? Код (Text): var Field = 'pay_date'; $.ajax({ type: 'POST', cache: false, url: '/wp-content/plugins/mfunny-cabs/ajax.php', dataType: 'json', data: { 'ajaxing':'get_events', 'mode':encodeURIComponent(Mode), 'view':encodeURIComponent(View), 'month':encodeURIComponent(Month), 'year':encodeURIComponent(Year), 'field':encodeURIComponent(Field) }, success: function(result) { // do stuff }, error: function(result){ alert('Error: '+result['status']+': '+result['responseText']); } });
Мне больше интересно что "а" значит. И почему ошибка возникает в jQuery, а не в моём скрипте. У меня никаких undefined точно нет. Если сделать это: Код (Text): alert('ajaxing=get_events&mode='+encodeURIComponent(Mode)+'&view='+encodeURIComponent(View)+'&month='+encodeURIComponent(Month)+'&year='+encodeURIComponent(Year)+'&field='+encodeURIComponent(Field)); То вернётся это: Код (Text): ajaxing=get_events&mode=new&view=new&month=4&year=2015&field=pay_date
У тебя точно нет такой переменной нигде, не? Потому что именно там происходит попытка обращения к несуществующей переменной по какой-то причине. Место, куда указывает ошибка не есть место, ошибку провоцирующее. var a = 10; var b = undefined;//по любой причине var c = a/b; //АШИПКА! Хотя код верный, выражение логичное. Просто b не должно быть undefined.
Код (Text): success: function(result) { // do stuff }, у вас так и выглядит в боевом варианте на котором тестируете и в теле функции только комментарий?
Да, ты прав, ошибка глубже, дело в пришедшем ответе. Вот ответ с полем 'date': Код (Text): result { 'array': { 14: 9 }, error: 0 } А с 'pay_date' в базе просто нет подходящих значений, php возвращает пустой массив: Код (Text): result { 'array': { }, error: 0 } Я пытаюсь сразу этот массив крутить через $each в функции success, чем и вызываю ошибку. Добавил проверку, теперь JS не падает: Код (Text): if (result['array']) { $.each(result['array'], function(Key, value){ // крутим } }
Freakmeister в хроме можно посмотреть в какой строке произошла ошибка и даже отладить значение этой переменной, сжатый jquery сложно читать, можно загрузить не сжатые исходники или в хроме где смотришь скрипт нажать на кнопку { } и код станет с форматированием
Это не имеет смысла, если имеем ошибку вида: В данном случае ошибка происходила в недрах JQuery. Но не по вине JQuery, а по вине битых входящих данных. Это ведь не повод ковырять работающую отлаженную библиотеку, верно? А пытаться в ее макаронах ставить брейкпоинты - гиблое дело. JQuery - отлаженный модуль. Бери за базис утверждение, что в нем ошибок нет. Значит их нужно искать до нее. Значит нужно искать разницу между вызовами. Разница только в значении переменной для AJAXа. Но в одном случае работает, в другом нет. Значит, дело не в самом значении, а в том, что оно меняет. В данном случае - это ответ сервера. И...бинго!