Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.02.2016, 19:25
Профессор
Отправить личное сообщение для hoax Посмотреть профиль Найти все сообщения от hoax
 
Регистрация: 20.09.2012
Сообщений: 151

Exit возвращает пустоту?
Добрый день.

У меня следующая задача - возвращать данные из таблицы при каждом клике на кнопку (аналог "показать больше" на ajax), и все бы хорошо, но тут стала проблема - необходимо скрыть кнопку при возвращении всех материалов, но не только скрыть, сначала нужно прекратить действие скрипта как только он дойдет до последнего материала.

На PHP реализовал следующим образом -

if(кол-во вызовов ф-и > кол-ва всех материалов (COUNT) ) { 

// прекратить действие

}


Использование return; в данной конструкции приведет остановке скрипта, что, конечно хорошо, но как-то уловить остановку в обработке данных на js-клиенте (данные трассируются через JSON) и отреагировать скрытием кнопки - нельзя

Реализовал через exit; if(...) { exit }; В таком случае, последний вызов подойдет по условию и javascript примет судя по всему, пустоту, потому что при проверке if(xhr.responseText == 0) результат true.


Но я не считаю такой способ удобным, как бы в таком случае поступили вы? Может быть можно как-то проверить предыдущее состояние responseText с последующим в цикле, и если последующее не отличается от предыдущего, значит, новые данные закончились и кнопку "показать больше" можно вырубать...
Ответить с цитированием
  #2 (permalink)  
Старый 22.02.2016, 19:32
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

А что нельзя if(!xhr.responseText) alert('End')?
Ответить с цитированием
  #3 (permalink)  
Старый 22.02.2016, 19:40
Профессор
Отправить личное сообщение для hoax Посмотреть профиль Найти все сообщения от hoax
 
Регистрация: 20.09.2012
Сообщений: 151

Сообщение от laimas Посмотреть сообщение
А что нельзя if(!xhr.responseText) alert('End')?
Нельзя, потому что responseText есть всегда, мы же каждый раз получаем несколько материалов при каждой итерации, и предыдущий результат всегда увеличивается, складывается с новыми. Даже если в responseText передать строку, все равно это не подойдет
Ответить с цитированием
  #4 (permalink)  
Старый 22.02.2016, 19:48
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от hoax
Нельзя, потому что responseText есть всегда
Свое еще раз перечитайте - у вас JSON, что же мешает передавать клиенту параметр или иную информацию, по которой не трудно будет понять, что либо пора остановиться, либо просто ничего не делать?
Ответить с цитированием
  #5 (permalink)  
Старый 22.02.2016, 20:06
Профессор
Отправить личное сообщение для hoax Посмотреть профиль Найти все сообщения от hoax
 
Регистрация: 20.09.2012
Сообщений: 151

Сообщение от laimas Посмотреть сообщение
у вас JSON, что же мешает передавать клиенту параметр
Передать из php в формате JSON?

Это значит создать массив с каким-либо параметром, преобразовать его в json и передать вместе с sql-выборкой объектов? Я даже примерно не знаю как это реализовать чтобы это работало.

Остановку процесса на стороне сервера реализовать можно, на клиенте мне кажется это можно сделать через цикл.

for(i=0;i<json.length.;i++) {

txt += json[i].id;

// if(json.length отличный от предыдущей интерации, или он не 
// обновляется) input.style.display='none';



}


как-то так наверное
Ответить с цитированием
  #6 (permalink)  
Старый 22.02.2016, 20:17
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

В чем собственно проблема?

Нельзя, потому что responseText есть всегда - спрашивается почему? Ибо есть еще не значит, что в нем что-то есть. Ну жмахает кто-то кнопкой, отдал что-то сервер, значит добавили на страницу, а если пришел null, значит не добавляем и прячем кнопку.

Не подходит и нужно загодя знать, что запрашивать больше нечего? Ну так какие проблемы узнать сколько всего записей в базе, сколько страниц это будет (если вывод разбивать на страницы) и передавать число страниц оставшихся клиенту?

Решений этому уйма, а проблема ваша искусственная.
Ответить с цитированием
  #7 (permalink)  
Старый 23.02.2016, 20:20
Профессор
Отправить личное сообщение для hoax Посмотреть профиль Найти все сообщения от hoax
 
Регистрация: 20.09.2012
Сообщений: 151

спасибо.все получилось
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
select .text() с числами в Chrome возвращает null m3hc jQuery 4 26.09.2011 16:36
Аякс не возвращает значение с сервера vamfirius Internet Explorer 0 26.05.2011 23:53
оператор return возвращает значение, а не ссылку. Vertuplatonium Общие вопросы Javascript 4 16.05.2011 14:02
xmlhttprequest возвращает пустоту alexxus AJAX и COMET 4 11.05.2011 18:44
Как работает оператор new когда функция-конструктор что-то возвращает ? olek Общие вопросы Javascript 2 06.03.2011 12:17