LINUX.ORG.RU

Не могу разобраться в javascript'е

 ,


0

1

Здравствуйте!

Есть у меня phpшник, который по get-запросу last=n выводит n строк вида id:param1:param2.

Javascript выводит это в div в таком-же виде. А нужно вот так: param1 : param2 , а id не выводить.

Скрипт должен работать по такому принципу:

  • При запуске шлем запрос last=40 на пхпшник (это уже сделано), затем отрезаем id и выводим в div результат вида param1 : param2.
  • Через 5 секунд шлем еще один запрос вида last=5, в нем ищем наибольший id из предыдущего запроса.
  • Если не находим, то шлем last=10 , last=15 и так далее, пока не найдем.
  • Когда найдем, выводим в div результат вида param1 : param2.

Каким образом это можно сделать?



Последнее исправление: Ivan372 (всего исправлений: 1)

Ответ на: комментарий от slaykovsky

Забыл про это. Спасибо, что напомнили.

Ivan372
() автор топика

Какое-то брутфорс-программирование. Не проще добавить в логику вывод записей после определенного id?

Radjah ★★★★★
()
Ответ на: комментарий от Radjah

Спасибо за идею, добавил это в пхпшник.

Но все еще не понятно как обрезать id от id:param1:param2.

И как выбирать из этих отрезанных id наибольший, что-бы в следующий запрос подставить?

Ivan372
() автор топика
Ответ на: комментарий от deep-purple

А Math.max() нужен массив, верно? А как мне из чего-то вида

32:ivan:12
33:ivan:123
34:ivan:1234
35:ivan:12334616
36:ivan:16

Сделать

ivan : 12
ivan : 123

Сначала надо поделить на части по : и запихатьь в массив.
Затем в цикле вполнять что-то вроде

$('#log').html($('#log').html() + '<br>' + param1 + " : "+param2)
Подставляя param1 и param2 из массива. После надо убрать из массива все, кроме id и дать его Math.max().

Ivan372
() автор топика
'id:param1:param2'.split(':').slice(1).join(' : ');

// = 'param1 : param2'
surefire ★★★
()
Ответ на: комментарий от Ivan372

Ты порешь какую-то дичь. Между фронтендом и бекендом должен быть нормальный формат обмена данными, а не та ахинея, которая у тебя есть сейчас.

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple

Сделал так, что от сервера приходит все уже готовое, и в последней строке ответа нужный id. Теперь другой вопрос:
как мне эту последнюю строку отделить от остального, и записать в переменную?

Ivan372
() автор топика

Здравствуйте!

Есть у меня phpшник, который по get-запросу last=n выводит n строк вида id:param1:param2.

Дайте угадаю, этот phpшник — Вы?

Virtuos86 ★★★★★
()

Вот такая вот херня получается у тех, кто вместо языков изучает фреймворки. И у тех, кто вместо фреймворков пилит велосипеды на костылях.

Goury ★★★★★
()

Есть у меня phpшник, который по get-запросу last=n выводит n строк вида id:param1:param2.

Ну хорошо, что хоть не додумался в json сериализировать.

Через 5 секунд шлем еще один запрос вида last=5, в нем ищем наибольший id из предыдущего запроса.

Ну тебе явно скучно не живется, раз не хочешь сделать это на бекенде.

Если не находим, то шлем last=10 , last=15 и так далее, пока не найдем.

На мой взгляд, ты полную хрень какую-то делаешь.

nikolnik ★★★
()
Ответ на: комментарий от nikolnik

На мой взгляд, ты полную хрень какую-то делаешь.

Это я уже понял. Разобрался, сделал вывод начиная с id и новее.

Ну тебе явно скучно не живется, раз не хочешь сделать это на бекенде.

А вот про это я не подумал... Можно же этот последний id в сесии хранить. Спасибо, что подсказали!

Ivan372
() автор топика
Ответ на: комментарий от Ivan372

А вот про это я не подумал... Можно же этот последний id в сесии хранить. Спасибо, что подсказали!

Все равно это тотал хрень. Дай больше подробностей, что тебе нужно. У меня просто чуйка, что тебе надо сделать ну что-то очень в лоб простое, но нехватка знаний вынуждает придумывать самые извращенные извращения извращений.

nikolnik ★★★
()
Ответ на: комментарий от nikolnik

Я хочу сделать простой чат. Вывод последний n сообщений и проверка новых каждые 5 секунд. Клиентскую часть непонятно зачем делаю на nw.js.

Ivan372
() автор топика
Ответ на: комментарий от Ivan372

и проверка новых каждые 5 секунд

шел 2016 год , не делай так.

для тебя придумали SSE и Websocket

surefire ★★★
()
Ответ на: комментарий от Ivan372

На самом деле, там особо толком нечего читать. Суть коротко в том, что, говоря к контексте пхп, у тебя есть скрипт, который получает get и post запросы, возвращая только сериализированную информацию в json. Еще почитай про Single Page Applications. Используя разные фреймфорки для dynamic data binding, типа knockoutJs, Angular и т.д, ты можешь динамически со свой страницы дергать разные сервисы асинхронно и получать с них информацию, после чего так же динамически отображать ее на странице, не обновляя ее.

nikolnik ★★★
()

Я тебе расскажу, почему твои решения были так уродливы. Во-первых, ты не знал про json, теперь знаешь, всегда используй его. Во-вторых, то, тебе хочется создать, называется real-time web application. Ты сталкиваешься с проблемой, что тебе как-то надо понимать, что появились сообщения в чате. Твое решение было бомбить сервер каждые пять секунд на поиск новых сообщений. Проблема приложений реального времени, на самом деле, красивая, хорошая, но более-менее вменяемое решение самому сделать не получится, тем более, уж, обновляя данные каждые пять секунд. В том же socket.io эта проблема решается на гораздо более низком уровне. В-третьих, я уверен, что ты столкнешься с проблемой, что получив новое сообщение, тебе надо перерисовать страницу. Первое очевидное решение - менять DOM элементы через JQuery каждый раз, когда ты получишь новые данные. Эта проблема решается, например, через data binging библиотеки или фреймворки, суть которых в том, что у тебя есть переменная в жабаскрипте: var iHateFuckingJavaScriptVariable = «someDjigurdaString»; На странице у тебя есть директива типа <h1 some-data-bind-directive=«text: iHateFuckingJavaScriptVariable»> и меняя значение своей переменной, фреймворк или библиотека сами будут менять значение элемента на странице, но это тебе на будущее.

nikolnik ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.