логин: 
<< предыдущая заметкаследующая заметка >>
18 марта 2014
как же я ненавижу чужие фреймфорки

Практически единственный чужой код, который присутствовал в моем движке — это аякс. Ну, который /design/JsHttpRequest.js на 24кб (это больше половины всего моего main.js!) и к нему еще /include_sys/JsHttpRequest.php, который вообще непонятно, чем занимается.

Это говно мамонта долгое время работало как-то, и даже позиционировало себя как процедуру, которая может по аяксу грузить файлы (фотка, загруженная в коммент). Но выяснилось, что оно давно уже не работает с движком Chrome и всеми его клонами Safari, включая мобильные браузеры. То есть — фотку не грузит.

Заебало совсем. Причем, я прекрасно отдаю себе отчет в том, что реализовать Аякс можно тремя способами (JS-инжекция, POST-iframe и какие-то штатные процедуры браузеров, у каждого свои). Для коротких запросов можно и JS, а вообще для всего остального, включая загрузку фоток, годится POST.

В общем, когда выяснилось, что загрузка фоток не работает, а у нас конкурс, то я за утро сделал свой аякс. Пока он используется только для отправки форм. Формат его очень прост, пишем:

<form onsubmit="return ajaxform(this,'comment.php',{a:'comsend',b:1, и прочие дополнительные переменные, если лень их вставлять отдельным тэгом hidden})">

[ну дальше всякие тэги формы]
<input type='submit' value='отправить'>
</form>

И всё. И оно аяксом отправляется на сервер на урл comment.php. На сервере в ответной части вообще практически ничего делать не надо. Ну инклюдим разве что вспомогательные и авторизационные:
include «../config.php»;
include $include_sys.»_autorize.php»;
А дальше берем пришедшие переменные из $_POST (файлы из $_FILES). Ответом отправляем исполняемый код JS командой otprav(«alert('всё дошло!')"); И все проблемы с фотками остались в прошлом, и работает быстро и гарантированно на любых браузерах.

В будущем надо будет вообще от этого старого JsHttpRequest.js избавляться. Просто пока у меня готова только функция ajaxform(), которая передает не массив данных, а данные из уже готовой формы. Потому что там, где загружена фотка — там уже всегда есть какая-то форма, иначе браузер просто не может ее взять. Осталось только заменить процедурку, чтобы можно было ей передавать не форму, а массив, а форму она сама где-нибудь скрыто сделает.

UPD: Все, вообще убрал старый аякс. Вроде работает. Ох, чую будут глюки...

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
архив понравившихся мне ссылок
Оставить комментарий
Windows Firefox
 Новосибирск
0
0
Oreolek
jsHttpRequest устарел ужаснейшим образом. Вот тут есть хороший список современных библиотек для разных популярных фич: http://youmightnotneedjquery.com/

https://github.com/ForbesLindesay/ajax - занимает семь Кб без gzip.
Linux Firefox
 Москва
0
0
Leonid Kaganov
И что, он сможет передавать ФАЙЛ? Не верю.
Linux Firefox
 Москва
0
0
Leonid Kaganov
Шо любопытно: сейчас ВЕСЬ аякс у меня в main.js (включая его вспомогательные процедуры) занимает 2,4 кб. А это ajax нескольких видов, в том числе mjax - который вообще ходит между серверами, и mijax, который занимается JS-инжекцией только. Короче, вся эта ерунда - 2,4 кб в составе основного фреймфорка. Который целиком 40 кб - со всеми своими фотоальбомами, отрисовками и передвижениями окошек, клавиатурными шорткеями и т.п.
Windows
 Каменск-Уральский
0
0
D.iK.iJ
Вы ведь видели там в названии домена youmightnotneedjquery.com :-)
Linux Firefox
 Молдова
0
0
INFOMAN
Щас же у браузеров File API есть, видимо через него и работает (по ссылке не ходил)

upd.: сходил по ссылке, думаю, что конкретно этот экземпляр файлы не умеет, хотя во внутренностях не копался и не проверял, так что хз.
Linux Safari Chrome
 Санкт-Петербург
0
0
Николай Лещёв (#4194773)
Вот же педагоги. И не лень им всё так красиво разъяснять. Молодцы! (я серьёзно) Откуда вы такие вещи узнаёте?
Windows Firefox
 Санкт-Петербург
0
0
[email protected]Кошак (cats-shadow)
Если тестить - с \blog обновиться?
Windows Firefox
 Санкт-Петербург
0
0
[email protected]Кошак (cats-shadow)
Кстати, в форме написания коммента поле mail пусто, хотя в карточке пользователя адрес прописан и подтверждён. Сейчас заполнял вручную его.
Linux Firefox
 Москва
0
0
Leonid Kaganov
А я их все три синхронизировал.
Windows Firefox
 Санкт-Петербург
0
0
[email protected]Кошак (cats-shadow)
Хм... Или меня глючит, или заработал быстрее движок? :)
Если обновляться с /dvevnik - тащит за собой кучу ненужного (в частности шаблон админ-панели с отсутствующими ссылками, звуки и картинки). :)
И если звуки и картинки можно вычеркнуть, то изменения в шаблонах потом править вручную. Заранее ж не знаешь, что там критичного появилось/исправилось. :) А с /blog - более "минималистичный" вариант.
Linux Firefox
 Москва
0
0
Leonid Kaganov
Думаю, с новым аяксом заработал быстрее.
Кучу ненужного ВЫЧЕРКИВАЕШЬ в админке.
Один раз, второй раз не спросит.

Я чуть подлатал сегодня и админку тоже, например, она вечно предлагала вычеркнуть из конфига какие-то переменные, которые считала ненужными (а я считал нужными). И ответ не запоминала. Теперь запоминает.
Windows Firefox
 Санкт-Петербург
0
0
[email protected]Кошак (cats-shadow)
Собственно так и сделано.

Обнаружилось, что с новым аяксом не работает подписка на эхи у модуля фидо (со старым - работает, в бэкапной копии сайта - выводит форму с чекбоксами).

majax error:

ajaxoff();clean('lajax_4_form');clean('lajax_4_ifr');chanpod=function(i,n) { majax('module.php',{mod:'FIDO',a:'change_podpiska',n:n,i:i}); }helps('settings',"<fieldset><legend>FIDO: 2:5030/74.1 подписка на эхи</legend><table><tr><td>74.LOCAL</td><td id=\'chp_2\'><input onchange=\"chanpod(this.checked?1:0,2)\" type=checkbox checked></td></tr></table><center><input class=r type=button value=\'просто кнопка\' onclick=\"clean(\'settings\')\"></center></fieldset>");posdiv('settings',-1,-1); idd('settings').focus();
Linux Firefox
 Москва
0
0
Leonid Kaganov
Поправил.
Не хватало оконечной точки с запятой в функции:
hanpod=function(i,n) { majax('module.php',{mod:'FIDO',a:'change_podpiska',n:n,i:i}); };

Видимо это связано с тем, что раньше я отдавал JS как njsn(), а теперь как njs(). То есть - вычеркивая переводы каретки из его кода. Вот забытая точка с запятой и сработала.

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

Проблема у нового аякса еще одна: если какая-то из переменных называется так же, как может называться поле (id, name, или вот в системе правки - action), то она не передается. Это связано с тем, что в JS выражение form['переменная'] ищет либо внутри тэга FORM существующий тэг input name='переменная', либо если соответствующее имя... находит в самом тэге FORM _его_ id или name или action и успокаивается на этом. Лечится это принудительным описанием всех таких возможных переменных, вот пока три. Видимо еще "method", "target", но я никогда такие имена в переменных аякса не использовал...
Windows Firefox
 Санкт-Петербург
0
0
[email protected]Кошак (cats-shadow)
Хм. Чистая инсталляция с /blog
При создании первой заметки:

majax error:

ajaxoff();clean('lajax_25_form');clean('lajax_25_ifr');idd('editor0_Date').value="";salert("Неверный адрес заметки! Этот адрес - то, что люди станут набирать в строке браузера после http://cats-home.net/, он не может быть пустым (тогда назовите страницу index.htm), допустимы только латинские буквы, цифры и символы -_./")

При том, что поле адреса не пусто. А при каждом нажатии кнопки "записать" номер формы в сообщении об ошибке увеличивается на единицу. Заметка при этом не создаётся.
Linux Firefox
 Москва
0
0
Leonid Kaganov
пофиксил
Windows Firefox
 Санкт-Петербург
0
0
[email protected]Кошак (cats-shadow)
Странно.
Чистая инсталляция (с очисткой кэша/кук броузера, удалением старых таблиц из БД).
В /install создал таблицы, добавил админа #1. По выходу на сайт перебрасывает на /contents. Меню админа не вызывается.
Обнаружил, что в config.php не добавилась строка «$admin_unics='1';». Добавил вручную. Заработало.

Но сообщение об ошибке всё-равно выскакивает в процессе создания записи.

Сначала
majax error:

ajaxoff();clean('lajax_7_form');clean('lajax_7_ifr');idd('editor0_Date').value="";salert("Неверный адрес заметки! Этот адрес - то, что люди станут набирать в строке браузера после http://cats-home.net/, он не может быть пустым (тогда назовите страницу index.htm), допустимы только латинские буквы, цифры и символы -_./");

после закрытия первого - второе:
majax error:

ajaxoff();clean('lajax_8_form');clean('lajax_8_ifr');idd('editor0_Date').value="";salert("Неверный адрес заметки! Этот адрес - то, что люди станут набирать в строке браузера после http://cats-home.net/, он не может быть пустым (тогда назовите страницу index.htm), допустимы только латинские буквы, цифры и символы -_./");

Тем не менее заметка сохраняется нормально.
Linux Firefox
 Москва
0
0
Leonid Kaganov
Я это поправил уже.
Linux Firefox
 Москва
0
0
Leonid Kaganov
Да, там был глючок /install, и после обновления появлялось много лишних файлов на выбор. Я в принципе понял, с чем он связан - с переводом каретки /r, который стал попадаться видимо из-за нового акса. Перевод каретки я вычеркнул, но почему-то оно продолжает видеть кучу мусора. Его надо просто ОДИН РАЗ отметить как ненужный при установке, и больше не спросит.
Windows Firefox
 Санкт-Петербург
0
0
[email protected]Кошак (cats-shadow)
Понятно.

всего комментариев: 24

<< предыдущая заметка следующая заметка >>