Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Очень странное поведение (https://javascript.ru/forum/misc/21201-ochen-strannoe-povedenie.html)

popov654 07.09.2011 20:25

Походу какой-то странный облом с методом POST... Какая-то странная ошибка:

[07.09.2011 20:24:38] JavaScript - http://popov654.pp.ru/livemarks/edit.php
Event thread: click
Uncaught exception: DOMException: INVALID_STATE_ERR
Error thrown at line 444, column 5 in saveChanges(callback) in http://popov654.pp.ru/livemarks/edit.php:
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
called from line 429, column 9 in <anonymous function: document.form1.save.onclick>() in http://popov654.pp.ru/livemarks/edit.php:
saveChanges(function() {})


Ну и почему?.. Всё ведь правильно сделал :(

popov654 08.09.2011 01:28

Убрал эту строчку, это дало возможность отладить PHP-скрипт. Но без неё скрипт не видит данные :cray:

popov654 08.09.2011 01:30

А с ней опять ошибка та же самая...

popov654 08.09.2011 01:40

А, блин. Почитал, разобрался. Следовало сначала метод open() вызвать у XMLHttpRequest, а потом уже заголовок ставить :D

popov654 08.09.2011 02:20

Да копать его колотить... :-E

Теперь русские буквы приходят в битом виде. Причём они ещё в БД в таком виде заносятся. Самое забавное, кодирование с помощью encodeURIComponent() ровным счётом ничего не даёт. На стороне сервера всё раскодируется само, даже не нужно вызывать urldecode(), а вот в базу всё равно пишется чёрт знает как.

popov654 08.09.2011 02:28

Фуууф...
Вот эти 3 строки в конфиге были причиной всех несчастий:

Код:

mysql_query("SET character_set_client='cp1251'");
mysql_query("SET character_set_connection='cp1251'");
mysql_query("SET character_set_results='cp1251'");

Это всё потому, что у меня база в UTF-8 (привычка ещё со времён Ayola), а сайты в CP-1251. Но тут JavaScript похоже как раз в Юникоде отдаёт данные :)
Чтобы не рисковать остальными модулями, добавил сразу после include "config.php" следующие 2 строчки:

Код:

mysql_query("SET character_set_client='utf8'");
mysql_query("SET character_set_connection='utf8'");

И всё заработало (по крайней мере после того, как добавил верхнюю).

Добавлено спустя 2 минуты: кстати, нижняя, как оказалось, вообще не нужна. Что вполне логично: она отвечает за передачу данных между PHP и MySQL

popov654 08.09.2011 02:32

Кстати, этот инклюд попортил мне ещё массу нервов, когда переменная с безобидным именем $base (номер предмета) вдруг начала чудесным образом менять значение с 3 на livemarks. И что бы вы думали? Правильно, она использовалась в config.php для хранения имени базы данных, а я имел неосторожность произвести чтение значения из $_POST ДО инклюда :lol:

popov654 08.09.2011 15:00

УРАААА! Вышла версия 4.3 с новыми улучшенными алгоритмами сохранения данных! Подробнее тут: LiveMarks 4.3


Часовой пояс GMT +3, время: 04:24.