Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.02.2014, 17:21
Профессор
Отправить личное сообщение для xTODx Посмотреть профиль Найти все сообщения от xTODx
 
Регистрация: 04.02.2014
Сообщений: 167

проблемы с jQuery.parseJSON
Всем привет, было сделано скрипт, который подгружает на страницу материалы при скроле.

$(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! в чём проблема?
Изображения:
Тип файла: jpg Снимок.jpg (3.0 Кб, 6 просмотров)
Ответить с цитированием
  #2 (permalink)  
Старый 24.02.2014, 17:22
Профессор
Отправить личное сообщение для xTODx Посмотреть профиль Найти все сообщения от xTODx
 
Регистрация: 04.02.2014
Сообщений: 167

Ответить с цитированием
  #3 (permalink)  
Старый 24.02.2014, 17:31
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

xTODx, а покажи ответ сервера (вкладка Network).
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #4 (permalink)  
Старый 24.02.2014, 23:20
Профессор
Отправить личное сообщение для xTODx Посмотреть профиль Найти все сообщения от xTODx
 
Регистрация: 04.02.2014
Сообщений: 167


Держите
Ответить с цитированием
  #5 (permalink)  
Старый 24.02.2014, 23:27
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Блин, всему учить..
Кликни по запросу, и там выбери вкладку Response - это и есть ответ сервера.
И сразу вопрос - почему у тебя Type идет text/html, а не application/json?
Если ты передаешь json, разве не логично выставить правильный заголовок?

Сообщение от xTODx
data = jQuery.parseJSON(data);
Если в вызов $.ajax передать параметр dataType: 'json', то jquery сама распарсит ответ, и необходимость в этой строчке отпадет.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 24.02.2014, 23:39
Профессор
Отправить личное сообщение для xTODx Посмотреть профиль Найти все сообщения от xTODx
 
Регистрация: 04.02.2014
Сообщений: 167

<!--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 допустим...
Ответить с цитированием
  #7 (permalink)  
Старый 25.02.2014, 00:06
Профессор
Отправить личное сообщение для xTODx Посмотреть профиль Найти все сообщения от xTODx
 
Регистрация: 04.02.2014
Сообщений: 167

он пути считает со своего места положения что ли? хотя указано всё с корневого каталога везде...
Ответить с цитированием
  #8 (permalink)  
Старый 25.02.2014, 00:07
Профессор
Отправить личное сообщение для xTODx Посмотреть профиль Найти все сообщения от xTODx
 
Регистрация: 04.02.2014
Сообщений: 167

можно ли сделать по другому??? подключить на прямую этот файл, а в обработчике вызывать просто функцию??
Ответить с цитированием
  #9 (permalink)  
Старый 25.02.2014, 00:43
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от xTODx
можно ли сделать по другому??? подключить на прямую этот файл, а в обработчике вызывать просто функцию??
От тебя:
1) структура каталогов и файлов
2) зависимости между файлами
Иначе мы не вкурсе че там у тебя и как.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #10 (permalink)  
Старый 25.02.2014, 01:04
Профессор
Отправить личное сообщение для xTODx Посмотреть профиль Найти все сообщения от xTODx
 
Регистрация: 04.02.2014
Сообщений: 167

папки в корне сайта
/controller
/js
/models
/views
/config
скрипт лежит в js, он открывается в файле который лежит в папке views.
js тянет файл с папки /controllers
в этот файл подключается файл с папки /models, в котором отправляется запрос к базе.
А что если я сразу подключу файл с папки сontrollers, а через обработчик ajah буду вызывать функцию? реально ли так?

Последний раз редактировалось xTODx, 25.02.2014 в 01:06.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы со слайдером. Shupamen Работа 1 15.12.2013 00:12
проблемы с PagingToolbar serg3091 ExtJS 4 26.06.2013 09:33
Решение проблемы с отображением элементов на странице mozyr Javascript под браузер 17 13.01.2012 02:34
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37
Drug&Drop + всплывание события = проблемы =(( _NoName_ Events/DOM/Window 4 05.03.2009 17:47