|
проблемы с jQuery.parseJSON
Вложений: 1
Всем привет, было сделано скрипт, который подгружает на страницу материалы при скроле.
$(document).ready(function(){ /* Переменная-флаг для отслеживания того, происходит ли в данный момент ajax-запрос. В самом начале даем ей значение false, т.е. запрос не в процессе выполнения */ var inProgress = false; /* С какой статьи надо делать выборку из базы при ajax-запросе */ var startFrom = 10; /* Используйте вариант $('#more').click(function() для того, чтобы дать пользователю возможность управлять процессом, кликая по кнопке "Дальше" под блоком статей (см. файл index.php) */ $('#more').click(function(){ loads(); }); function loads(){ $.ajax({ /* адрес файла-обработчика запроса */ url: 'obrabotchik.php', /* метод отправки данных */ method: 'POST', /* данные, которые мы передаем в файл-обработчик */ data: {"startFrom" : startFrom}, /* что нужно сделать до отправки запрса */ beforeSend: function() { /* меняем значение флага на true, т.е. запрос сейчас в процессе выполнения */ inProgress = true;} /* что нужно сделать по факту выполнения запроса */ }).done(function(data){ /* Преобразуем результат, пришедший от обработчика - преобразуем json-строку обратно в массив */ data = jQuery.parseJSON(data); /* Если массив не пуст (т.е. статьи там есть) */ if (data.length > 0) { /* Делаем проход по каждому результату, оказвашемуся в массиве, где в index попадает индекс текущего элемента массива, а в data - сама статья */ $.each(data, function(index, data){ /* Отбираем по идентификатору блок со статьями и дозаполняем его новыми данными */ $("#pages").append("<p id='newmat"+ data.id +"' class = 'data' style = 'height:0px; opacity:0;'><b>" + data.title + "</b><br />" + data.id + "</p>"); $('#newmat'+ data.id).stop().animate({ opacity: "1", height: '50px'}, 1000); }); /* По факту окончания запроса снова меняем значение флага на false */ inProgress = false; // Увеличиваем на 10 порядковый номер статьи, с которой надо начинать выборку из базы startFrom += 10; }}); }; $(window).scroll(function() { /* Если высота окна + высота прокрутки больше или равны высоте всего документа и ajax-запрос в настоящий момент не выполняется, то запускаем ajax-запрос */ if($(window).scrollTop() + $(window).height() >= $(document).height() && !inProgress) { loads(); } }); }); это был тестовый вариант, и всё работало. Вот сегодня начал переносить это чудо на основной проект. Итог - не работает. Хром пишет как на прикреплённой картинке. Вот код который ставлю в проект $(document).ready(function(){ /* Переменная-флаг для отслеживания того, происходит ли в данный момент ajax-запрос. В самом начале даем ей значение false, т.е. запрос не в процессе выполнения */ var inProgress = false; /* С какой статьи надо делать выборку из базы при ajax-запросе */ var startFrom = 0; loads(); /* Используйте вариант $('#more').click(function() для того, чтобы дать пользователю возможность управлять процессом, кликая по кнопке "Дальше" под блоком статей (см. файл index.php) */ $('#more').click(function(){ loads(); }); function loads(){ $.ajax({ /* адрес файла-обработчика запроса */ url: '/controller/cpartfolio.php', /* метод отправки данных */ method: 'POST', /* данные, которые мы передаем в файл-обработчик */ data: {"startFrom" : startFrom}, /* что нужно сделать до отправки запрса */ beforeSend: function() { /* меняем значение флага на true, т.е. запрос сейчас в процессе выполнения */ inProgress = true;} /* что нужно сделать по факту выполнения запроса */ }).done(function(data){ /* Преобразуем результат, пришедший от обработчика - преобразуем json-строку обратно в массив */ data = jQuery.parseJSON(data); /* Если массив не пуст (т.е. статьи там есть) */ if (data.length > 0) { /* Делаем проход по каждому результату, оказвашемуся в массиве, где в index попадает индекс текущего элемента массива, а в data - сама статья */ $.each(data, function(index, data){ /* Отбираем по идентификатору блок со статьями и дозаполняем его новыми данными */ $("#pages").append("<p id='newmat"+ data.id +"' class = 'data' style = 'height:0px; opacity:0;'><b>" + data.name + "</b><br />" + data.id + "</p>"); $('#newmat'+ data.id).stop().animate({ opacity: "1", height: '50px'}, 1000); }); /* По факту окончания запроса снова меняем значение флага на false */ inProgress = false; // Увеличиваем на 10 порядковый номер статьи, с которой надо начинать выборку из базы startFrom += 10; }}); }; $(window).scroll(function() { /* Если высота окна + высота прокрутки больше или равны высоте всего документа и ajax-запрос в настоящий момент не выполняется, то запускаем ajax-запрос */ if($(window).scrollTop() + $(window).height() >= $(document).height() && !inProgress) { loads(); } }); });// JavaScript Document HELP! в чём проблема? |
![]() |
xTODx, а покажи ответ сервера (вкладка Network).
|
![]() Держите |
Блин, всему учить..
Кликни по запросу, и там выбери вкладку Response - это и есть ответ сервера. И сразу вопрос - почему у тебя Type идет text/html, а не application/json? Если ты передаешь json, разве не логично выставить правильный заголовок? Цитата:
|
<!--error--><br /> <b>Warning</b>: require_once(/models/mpartfolio.php) [<a href='function.require-once'>function.require-once</a>]: failed to open stream: No such file or directory in <b>Z:\home\mycms\www\controller\cpartfolio.php</b> on line <b>2</b><br /> <script language=JavaScript src='/denwer/errors/phperror_js.php'></script><!--error--><br /> <b>Fatal error</b>: require_once() [<a href='function.require'>function.require</a>]: Failed opening required '/models/mpartfolio.php' (include_path='.;C:\php\pear') in <b>Z:\home\mycms\www\controller\cpartfolio.php</b> on line <b>2</b><br /> <script language=JavaScript src='/denwer/errors/phperror_js.php'></script> понял что не хочет подключать файлы, но... как с этим бороться?? эти файлы есть по пути site/models/mpartfolio.php допустим... |
он пути считает со своего места положения что ли? хотя указано всё с корневого каталога везде...
|
можно ли сделать по другому??? подключить на прямую этот файл, а в обработчике вызывать просто функцию??
|
Цитата:
1) структура каталогов и файлов 2) зависимости между файлами Иначе мы не вкурсе че там у тебя и как. |
папки в корне сайта
/controller /js /models /views /config скрипт лежит в js, он открывается в файле который лежит в папке views. js тянет файл с папки /controllers в этот файл подключается файл с папки /models, в котором отправляется запрос к базе. А что если я сразу подключу файл с папки сontrollers, а через обработчик ajah буду вызывать функцию? реально ли так? |
Часовой пояс GMT +3, время: 16:28. |
|