| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Общие вопросы > проблема с пробелом |
| Автор: bazzjr 11.5.2010, 12:10 | ||
| Всем привет. Имею следующую проблему: есть текстовое поле <textarea name="textA" id="textA" rows="3" cols="45"></textarea> Пишу в это поле текст "1пробел1" - т.е. пробел при отсылке конвертируется в %20. после нажатия на кнопку submit, данные с "textA" пытаюсь отправить через ajax следующим образом:
После чего выдает ошибку в консоли ошибок: Ошибка: XML tag name mismatch (expected hr) Источник: http://site/ Строка 222, символ 2 Исходный код: </body> На локальном компе все нормально работает, а выкладываю на сервер, выдает такую ошибку. В чем может быть проблема? |
| Автор: bars80080 11.5.2010, 14:30 |
| по какому адресу находится страница? по какому идёт аякс-запрос? точно ли доменные имена соблюдены? он будет косячить даже если страница по адресу www. , а запрос нет |
| Автор: bazzjr 11.5.2010, 14:43 |
| Забыл сказать... Если посылать данные в форме вида "111222333", т.е. без пробела, то все хорошо, все работает. Стоит указать пробел (%20) и вылазит эта ошибка. Насчет других символов не знаю, не тестировал пока... Что за хз не понимаю... |
| Автор: bars80080 11.5.2010, 15:00 | ||
кодируйте входящие переменные:
правда, вы как-то странно делаете, у вас в somevar - кусок пути ( path1/path2/path3 ) или строка поиска ( ?param=value¶m2=value2 ) ? |
| Автор: bazzjr 11.5.2010, 15:09 |
| Все правильно, кусок строки с переменными, только эта строка потом обрабатывается modRewrite. bars80080 а как на твой взгляд лучше сделать? Проверил... не катит "encodeURIComponent" :( все таже самая ошибка... Более того, если написать в текстовом поле 1%201 (1пробел1), то все нормально, строка обрабатывается, т.е. на выходе мы получаем "1%25201" |
| Автор: bazzjr 11.5.2010, 23:01 |
| Вообщем пока проблему так и не решил. Если пропускаешь 2-3 раза через encodeURIComponent, то вроде записываются данные в базу, но все равно не те, записываются мнемоники. Вот подскажите как сделать лучше: У меня есть база данных MySql текстовое поле(textarea) и modrewrite. Мне нужно через axaj(тот что писал выше) закинуть в базу текст с текстового поля, при это все данные обрабатываются modrewrite и правилом - - RewriteRule ^somepath/([0-9]+)/([0-9a-z]{30,35})/(.*)$ somefile.php?id_post=$1&check=$2&message=$3 [L] $message и есть самое слабое место сейчас... Т.е. мессагу я передаю прямо в заголовке($message=textarea). может нужно подавать данные через <form>(я подавал напрямую через document.getElementById('textA').value) или еще какие варианты есть??? подскажите как у вас реализованы отправки сообщений через ajax. |
| Автор: ksnk 12.5.2010, 11:49 | ||
| bazzjr, Post'ом передаешь данные, а собственно сообщение укладываешь в get? Ай маладец... А у нас все через... get... передавай данные этим самым постом, он для этого и придуман.
|
| Автор: bazzjr 13.5.2010, 08:54 | ||
Побившись головой Ап стену(
Она работает! Но появились некоторые другие проблемы, в частности если в текстовое поле вводишь текст с пробелами более 250 символов, то 0(нулевая) ошибка ajaxa, а если 500 символов, то вообще ошибка 400 bad request. Если ввести в поле например 500 любых символов без пробела, то все нормально. Может кто сталкивался и знает решение проблемы? |
| Автор: bars80080 13.5.2010, 14:16 |
| у тебя каждый пробел превращается в 5 символов, 500*5 = 2500, а два килобайта с гаком - это максимум что ждут от url запроса. в некоторых системах существуют ограничения по этому поводу имхо |
| Автор: bazzjr 13.5.2010, 15:15 |
| П П Ц! а как же быть??? ну ведь как то другие отправляют такие вот ajax textarea... Ну самый приходящий на ум пример - google переводчик... там же можно вводить много символов! |
| Автор: bars80080 13.5.2010, 19:29 | ||
дык они отправляют данные через пост. там сколько угодно можно передать
сейчас да. раньше в варианте http://www.google.ru/language_tools?hl=ru отправка шла обычной формой методом get. там длина текста была ограничена. теперь сделали, как и в аякс-варианте post, тут уже неограничено |
| Автор: bazzjr 13.5.2010, 22:04 | ||
подожди, а моя конструкция что, не отправляет через POST?
Все таки я пока не знаю решение проблемы. Единственное что я могу сделать на данный момент, это ограничить символы в textarea до GET формата. |
| Автор: bars80080 13.5.2010, 22:35 | ||
| твоя конструкция отправляет post. но никаких данных в теле пост запроса нет. ksnk, показывал, как они добавляются: request.send('данные'); а в твоём случае данные добавляются к урлу, что по сути и есть get-запрос. обычно пользуются чем-то одним, хотя и так без экстрима бы работало. в данном случае, экстрим - очень длинная строка, а также не латинские символы в урле. которые теоретически можно наладить, чтоб работало, но практически никто этим не занимается. философия тут такая:
|
| Автор: bazzjr 15.5.2010, 09:30 |
| bars80080, ksnk, большое спасибо! Вы были правы, насчет post данных и насчет бесполезности modrewrite. Я все сделал как сказал bars80080, теперь все работает, только все равно не хочет передовать более 1100 символов(методом post-наверно ограничения сервера). Тем не менее в свою копилку я положу еще +1 очко опыта |
| Автор: IgorIV 15.5.2010, 10:16 |
| bazzjr, тем не менее, не мешало бы еще кое-кому положить + в копилку. |
| Автор: bars80080 15.5.2010, 13:19 |
| нет, на пост обычно ограничения исчисляются в мегабайтах. тут надо бы посмотреть в функции обработчики, и собственно сам передаваемый текст. в каких случаях его обрезает |