Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с пробелом 
V
    Опции темы
bazzjr
Дата 11.5.2010, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 27.12.2007
Где: Россия, Пермь

Репутация: нет
Всего: 6



Всем привет.

Имею следующую проблему:

есть текстовое поле <textarea name="textA" id="textA" rows="3" cols="45"></textarea>
Пишу в это поле текст "1пробел1" - т.е. пробел при отсылке конвертируется в %20.

после нажатия на кнопку submit, данные с "textA" пытаюсь отправить через ajax следующим образом:

Код

function ajax(url){
    var somevar= document.getElementById('textA').value;
    createRequest();   
    request.open("POST",url + '/123456/' + somevar,true);
    request.onreadystatechange = updatePage;
    request.send(null);
}
function updatePage() {
     if (request.readyState == 4) {
       if (request.status == 200) {
          response = request.responseText;
          eval(response);
       } else
         alert("status is " + request.status);
     }
   }




После чего выдает ошибку в консоли ошибок:

Ошибка: XML tag name mismatch (expected hr)
Источник: http://site/
Строка 222, символ 2
Исходный код:
</body>


На локальном компе все нормально работает, а выкладываю на сервер, выдает такую ошибку.

В чем может быть проблема?

Это сообщение отредактировал(а) bazzjr - 11.5.2010, 12:11
PM MAIL ICQ   Вверх
bars80080
Дата 11.5.2010, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



по какому адресу находится страница? по какому идёт аякс-запрос?
точно ли доменные имена соблюдены? он будет косячить даже если страница по адресу www. , а запрос нет
PM MAIL WWW   Вверх
bazzjr
Дата 11.5.2010, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 27.12.2007
Где: Россия, Пермь

Репутация: нет
Всего: 6



Забыл сказать...

Если посылать данные в форме вида "111222333", т.е. без пробела, то все хорошо, все работает.

Стоит указать пробел (%20) и вылазит эта ошибка. Насчет других символов не знаю, не тестировал пока...

Что за хз не понимаю...
PM MAIL ICQ   Вверх
bars80080
Дата 11.5.2010, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



кодируйте входящие переменные:

Код

    var somevar= document.getElementById('textA').value;
    somevar = encodeURIComponent(somevar);



правда, вы как-то странно делаете, у вас в somevar - кусок пути ( path1/path2/path3 ) или строка поиска ( ?param=value&param2=value2 ) ?


PM MAIL WWW   Вверх
bazzjr
Дата 11.5.2010, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 27.12.2007
Где: Россия, Пермь

Репутация: нет
Всего: 6



Все правильно, кусок строки с переменными, только эта строка потом обрабатывается modRewrite.

bars80080 а как на твой взгляд лучше сделать? 

Проверил... не катит "encodeURIComponent" :( все таже самая ошибка...

Более того, если написать в текстовом поле 1%201 (1пробел1), то все нормально, строка обрабатывается, т.е. на выходе мы получаем "1%25201"

Это сообщение отредактировал(а) bazzjr - 11.5.2010, 15:23
PM MAIL ICQ   Вверх
bars80080
Дата 11.5.2010, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



да я вообще без понятия, как можно было создавать пути с пробелами. традиционно все стараются их избегать от греха подальше


Цитата(bazzjr @  11.5.2010,  15:09 Найти цитируемый пост)
Более того, если написать в текстовом поле 1%201 (1пробел1), то все нормально, строка обрабатывается, т.е. на выходе мы получаем "1%25201"

ну, в таком случае попробуй два раза пропустить через encodeURIComponent. вообще, любая задача решается отладкой, то есть тупо смотрим что за значения переменных получаются. особенно в этом случае, когда ручками получается, а программно нет. надо просто добиться создания аналогичного текста
PM MAIL WWW   Вверх
bazzjr
Дата 11.5.2010, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 27.12.2007
Где: Россия, Пермь

Репутация: нет
Всего: 6



Вообщем пока проблему так и не решил.

Если пропускаешь 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.
PM MAIL ICQ   Вверх
ksnk
Дата 12.5.2010, 11:49 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



bazzjr, Post'ом передаешь данные, а собственно сообщение укладываешь в get? Ай маладец... А у нас все через... get...  smile 

передавай данные этим самым постом, он для этого и придуман. 
Код

    request.open("POST",url + '/123456/' ,true);
    request.onreadystatechange = updatePage;
    request.send('textA='+ encodeURIComponent(document.getElementById('textA').value));




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
bazzjr
Дата 13.5.2010, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 27.12.2007
Где: Россия, Пермь

Репутация: нет
Всего: 6



Побившись головой Ап стену( smile ) вчера и сегодня ночью... я пришел к интересной конструкции:

Код

function ajax(url){
    var somevar = encodeURIComponent(document.getElementById('somevar').value);
    createRequest();   
    request.open("POST",url + '/123456/' + encodeURIComponent(somevar),true);
    request.onreadystatechange = updatePage;
    request.send(null);
}



Она работает! Но появились некоторые другие проблемы, в частности если в текстовое поле вводишь текст с пробелами более 250 символов, то 0(нулевая) ошибка ajaxa, а если 500 символов, то вообще ошибка 400 bad request.

Если ввести в поле например 500 любых символов без пробела, то все нормально.

Может кто сталкивался и знает решение проблемы? 

Это сообщение отредактировал(а) bazzjr - 13.5.2010, 08:55
PM MAIL ICQ   Вверх
bars80080
Дата 13.5.2010, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



у тебя каждый пробел превращается в 5 символов, 500*5 = 2500, а два килобайта с гаком - это максимум что ждут от url запроса. в некоторых системах существуют ограничения по этому поводу

имхо
PM MAIL WWW   Вверх
bazzjr
Дата 13.5.2010, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 27.12.2007
Где: Россия, Пермь

Репутация: нет
Всего: 6



П П Ц!  а как же быть??? ну ведь как то другие отправляют такие вот ajax textarea... 

Ну самый приходящий на ум пример - google переводчик... там же можно вводить много символов!

Это сообщение отредактировал(а) bazzjr - 13.5.2010, 15:15
PM MAIL ICQ   Вверх
bars80080
Дата 13.5.2010, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



дык они отправляют данные через пост. там сколько угодно можно передать


Цитата(bazzjr @  13.5.2010,  15:15 Найти цитируемый пост)
Ну самый приходящий на ум пример - google переводчик... там же можно вводить много символов!

сейчас да. раньше в варианте http://www.google.ru/language_tools?hl=ru отправка шла обычной формой методом get. там длина текста была ограничена. теперь сделали, как и в аякс-варианте post, тут уже неограничено

PM MAIL WWW   Вверх
bazzjr
Дата 13.5.2010, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 27.12.2007
Где: Россия, Пермь

Репутация: нет
Всего: 6



подожди, а моя конструкция что, не отправляет через POST?

Код

function ajax(url){
    var somevar = encodeURIComponent(document.getElementById('somevar').value);
    createRequest();   
    request.open("POST",url + '/123456/' + encodeURIComponent(somevar),true);
    request.onreadystatechange = updatePage;
    request.send(null);
}


Все таки я пока не знаю решение проблемы.

Единственное что я могу сделать на данный момент, это ограничить символы в textarea до GET формата.
PM MAIL ICQ   Вверх
bars80080
Дата 13.5.2010, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 15
Всего: 315



твоя конструкция отправляет post. но никаких данных в теле пост запроса нет.
ksnk, показывал, как они добавляются: request.send('данные');

а в твоём случае данные добавляются к урлу, что по сути и есть get-запрос.

обычно пользуются чем-то одним, хотя и так без экстрима бы работало. в данном случае, экстрим - очень длинная строка, а также не латинские символы в урле. которые теоретически можно наладить, чтоб работало, но практически никто этим не занимается.

философия тут такая: 
  • есть урл - он неизменяем, то есть аякс-запросы при выборе пользователя какого параметра шлются всегда на один какой-то адрес server.ru/folder/script.php
  • если надо прицепить немного данных, то их добавляют в виде search-строки, так называемый get-запрос: 
    server.ru/folder/script.php?param1=value1&param2=value2
    причём тут интересный момент: зачем тебе вообще mod_rewrite для аякс-запроса? ведь ЧПУ (красивые урлы) нужны для людей. а машине пофигу, ей чем проще - тем лучше
  • если начинается экстрим, то урл обычный
    server.ru/folder/script.php
    и добавляются данные в post-запрос: 
    Код

    var data = 'param1=value1&param2=value2';
    request.send(data);

PM MAIL WWW   Вверх
bazzjr
Дата 15.5.2010, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 27.12.2007
Где: Россия, Пермь

Репутация: нет
Всего: 6



bars80080ksnk, большое спасибо!

Вы были правы, насчет post данных и насчет бесполезности modrewrite.

Я все сделал как сказал bars80080, теперь все работает, только все равно не хочет передовать более 1100 символов(методом post-наверно ограничения сервера).


Тем не менее в свою копилку я положу еще +1 очко опыта  smile 
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0972 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.