Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.11.2015, 11:04
Аватар для fenix_63
Аспирант
Отправить личное сообщение для fenix_63 Посмотреть профиль Найти все сообщения от fenix_63
 
Регистрация: 05.06.2014
Сообщений: 92

AJAX меняет символы при отправке данных
Всем привет. Народ, тут вот такая тема. Из input'а хочу данные добавить в базу данных, используя Ajax-запрос:

$("#FormSubmit").click(function (e) {//если произошёл клик по кнопке "Добоавить номер"

        e.preventDefault();//Отключает стандартное действие (поведение) для события клик. Это нужно для того, чтобы пользователь оставался на данной странице

		
		
		
        if($("#contentText").val()==="") //simple validation
        {
            alert("Введите текст!");
            return false;
        }

		
		
		//post переменные. Представляют собой пару Ключ=значение. content_txt - ключ, #contentText - значение
        var myData = "content_txt="+ $("#contentText").val() + "&search_field=" + $("#search").val() + "&field3=" + $("#field3").val() + "&field4=" +
		$("#field4").val(); 

		
		
		
        [B]jQuery.ajax({
            type: "POST", // HTTP метод  POST или GET
            url: "response.php", //url-адрес, по которому будет отправлен запрос
            dataType:"text", // Тип данных,  которые пришлет сервер в ответ на запрос ,например, HTML, json
            //processData:false,//Отключаем эту опцию для того, чтобы можно было передавать несколько значений
			data:myData, //данные, которые будут отправлены на сервер (post переменные)
            //contentType: "text/plain; charset=utf-8",//Попробуем явно указать эту опцию, чтобы символ + не заменялся на пробел
			
			
			
			
			success:function(response){
            $("#responds").append(response);//Добавляем в конец списка новый (или новые) номер(а)
            $("#contentText").val(''); //очищаем текстовое поле после успешной вставки
			$("#search").val('');
			$("#field3").val('');
			$("#field4").val('');
            },
            error:function (xhr, ajaxOptions, thrownError){
                alert('Неудачная попытка добавления данных '+thrownError); //выводим ошибку
            }
        });[/B]
    });


Там телефонные номера ввожу. Если ввожу без символа "+", т.е. 8123456, то всё нормально работает, и нормально номер добавляется в базу. А вот если ввожу с символом "+", то Ajax его перед отправкой на сервер заменяет на пробел, и в базу данных добавляет номер с пробелом вместо символа "+".

Подскажите пожалуйста, где смотреть? А то я новичек в JS

Полностью HTML-форма вот тут: http://fenix-63.hol.es/

Добавляю в базу за 1 раз по 4 номера - поля "Отправитель", "Комментарий", "поле 3", "Поле 4". пока что вот только над полем "Отправитель" мучаюсь. Помогите пожалуйста.
Ответить с цитированием
  #2 (permalink)  
Старый 13.11.2015, 13:23
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Вот это:

var myData = "content_txt="+ $("#contentText").val() + "&search_field=" + $("#search").val() + "&field3=" + $("#field3").val() + "&field4=" + $("#field4").val();

выбрасываем, а строку 28 пишем так:

data: $(this).serialize(),

или

data: $(this).serializeArray(),

и должно работать.
Ответить с цитированием
  #3 (permalink)  
Старый 13.11.2015, 13:44
Аватар для fenix_63
Аспирант
Отправить личное сообщение для fenix_63 Посмотреть профиль Найти все сообщения от fenix_63
 
Регистрация: 05.06.2014
Сообщений: 92

не работает это, обе строки не работают - Internal Server Error. Да и если переменную myData выбрасываем, то откуда данные то брать?
Ответить с цитированием
  #4 (permalink)  
Старый 13.11.2015, 14:15
Аватар для fenix_63
Аспирант
Отправить личное сообщение для fenix_63 Посмотреть профиль Найти все сообщения от fenix_63
 
Регистрация: 05.06.2014
Сообщений: 92

Может символ "+" надо как то экранировать перед отправкой к php файлу?
Ответить с цитированием
  #5 (permalink)  
Старый 13.11.2015, 14:43
Аватар для fenix_63
Аспирант
Отправить личное сообщение для fenix_63 Посмотреть профиль Найти все сообщения от fenix_63
 
Регистрация: 05.06.2014
Сообщений: 92

Проблема решена.
Строку

var myData = "content_txt="+ $("#contentText").val() + "&search_field=" + $("#search").val() + "&field3=" + $("#field3").val() + "&field4=" +$("#field4").val();


Надо заменить на строку:

var myData = "content_txt="+ encodeURIComponent($("#contentText").val()) + "&search_field=" + encodeURIComponent($("#search").val()) + "&field3=" + encodeURIComponent($("#field3").val()) + "&field4=" + encodeURIComponent($("#field4").val());


Т.е. применить функцию encodeURIComponent() к каждой переменной, в которой потенциально может встретиться символ "+".

Тему можно закрывать.
Ответить с цитированием
  #6 (permalink)  
Старый 13.11.2015, 14:45
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

<?
if($_POST) {
    exit(implode("\n", $_POST));
}
?>
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script> 
$(function() {
    $('form').submit(function() {
        $.post(location, $(this).serialize(), function(d) {
           alert(d) 
        });
        return false
    })
});
</script>     
</head> 
<body>
<form><input name="phone" value="+8 888 888 88-88-88" />
<input name="as" value="Текст с +" />
<button>Send</button></form>
</body> 
</html>


Выполните, и проблем не будет. А если просмотреть в отладчике данные передаваемые на сервер, то это будет так (важное выделено красным):

Content-Type: application/x-www-form-urlencoded; charset=UTF-8

phone=%2B8+888+888+88-88-88&as=%D0%A2%D0%B5%D0%BA%D1%81%D1%82+%D1%81+%2B

вот так и кодируются данные- пробелы заменяются на +, а плюс на %2B.
Ответить с цитированием
  #7 (permalink)  
Старый 17.11.2015, 14:20
Аватар для fenix_63
Аспирант
Отправить личное сообщение для fenix_63 Посмотреть профиль Найти все сообщения от fenix_63
 
Регистрация: 05.06.2014
Сообщений: 92

Понял, спасибо !
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов формы, при повторном вызове (ajax) soltx Элементы интерфейса 3 07.09.2014 23:07
Выделение активного пункта меню при ajax запросе faecker AJAX и COMET 6 04.09.2014 19:14
При каком объеме вызова AJAX появляется задержка? hoax AJAX и COMET 0 14.08.2014 02:38
При отправке через ajax не открывается файл-адресат temuch-13 AJAX и COMET 6 09.07.2014 17:03
Вывод данных единожды, при открытии окна? Ggorsh Events/DOM/Window 1 28.04.2009 01:04