С Новым годом! Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830

Обработка формы

10.10.2016, 19:33. Показов 2915. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравствуйте!

Никак не могу победить обработку формы. Проблема еще в том, что JS я не знаю, только PHP.

В общем, есть форма на HTML:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
                <form class="news-letter" method="post">
                    <p class="alert-success"></p>
                    <p class="alert-warning"></p>
 
                    <div class="subscribe-hide">
                        <input class="form-control" type="email" id="subscribe-email" name="subscribe-email" placeholder="Ваш Email"  required>
                        <button  type="submit" id="subscribe-submit" class="btn"><i class="fa fa-envelope"></i></button>
                        <span id="subscribe-loading" class="btn"> <i class="fa fa-refresh fa-spin"></i> </span>
                        <div class="subscribe-error"></div>
                    </div><!-- /.subscribe-hide -->
                    <div class="subscribe-message"></div>
                </form><!-- /.news-letter -->
Есть её обработчик на PHP. Не знал, как правильно в JSON вывести, но вроде с этим справился...
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
require_once '../../models/functions.php';
require_once '../../models/M_MSQL.php';
 
$mail = input(['EMAIL']);
 
if($mail == '')
    return false;
 
$db = M_MSQL::Instance();
 
if ($db->Insert('subscribe', $mail)){
    $ret = array('result' => 'success');
    echo json_encode($ret);
}
А вот JS код, который это всё обрабатывает:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/* Subscribe
  -------------------------------------------------------------------*/
    $(".news-letter").ajaxChimp({
        callback: mailchimpResponse,
        url: "http://algoritm.96.lt/main/php/subscribe.php?"
    });
 
    function mailchimpResponse(resp) {
         if(resp.result === 'success') {
         
            $('.alert-success').html(resp.msg).fadeIn().delay(3000).fadeOut();
            
        } else if(resp.result === 'error') {
            $('.alert-warning').html(resp.msg).fadeIn().delay(3000).fadeOut();
        }  
    };
 
 
 
 
    /* Subscribe End
    -------------------------------------------------------------------*/
Вот JS код с этими функциями:
Кликните здесь для просмотра всего текста
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
(function ($) {
    "use strict";
    $.ajaxChimp = {
        responses: {
            "Мы отправили вам подтверждение по электронной почте": 0,
            "Пожалуйста, введите значение": 1,
            "Адрес электронной почты должен содержать один знак @": 2,
            "Доменная часть адреса электронной почты является недействительной (текст после @)": 3,
            "Имя пользователя в адресе электронной почты является недействительным (часть до @)": 4,
            "Этот адрес электронной почты недействителен. Пожалуйста, введите реальный адрес электронной почты.": 5
        }, translations: {en: null}, init: function (selector, options) {
            $(selector).ajaxChimp(options)
        }
    };
    $.fn.ajaxChimp = function (options) {
        $(this).each(function (i, elem) {
            var form = $(elem);
            var email = form.find("input[type=email]");
            var label = form.find("label[for=" + email.attr("id") + "]");
            var settings = $.extend({url: form.attr("action"), language: "en"}, options);
            var url = settings.url.replace("/post?", "/post-json?").concat("&c=?");
            form.attr("novalidate", "true");
            email.attr("name", "EMAIL");
            form.submit(function () {
                var msg;
 
                function successCallback(resp) {
                    if (resp.result === "success") {
                        msg = "Мы отправили вам подтверждение по электронной почте";
                        label.removeClass("error").addClass("valid");
                        email.removeClass("error").addClass("valid")
                    } else {
                        email.removeClass("valid").addClass("error");
                        label.removeClass("valid").addClass("error");
                        var index = -1;
                        try {
                            var parts = resp.msg.split(" - ", 2);
                            if (parts[1] === undefined) {
                                msg = resp.msg
                            } else {
                                var i = parseInt(parts[0], 10);
                                if (i.toString() === parts[0]) {
                                    index = parts[0];
                                    msg = parts[1]
                                } else {
                                    index = -1;
                                    msg = resp.msg
                                }
                            }
                        } catch (e) {
                            index = -1;
                            msg = resp.msg
                        }
                    }
                    if (settings.language !== "en" && $.ajaxChimp.responses[msg] !== undefined && $.ajaxChimp.translations && $.ajaxChimp.translations[settings.language] && $.ajaxChimp.translations[settings.language][$.ajaxChimp.responses[msg]]) {
                        msg = $.ajaxChimp.translations[settings.language][$.ajaxChimp.responses[msg]]
                    }
                    label.html(msg);
                    label.show(2e3);
                    if (settings.callback) {
                        settings.callback(resp)
                    }
                }
 
                var data = {};
                var dataArray = form.serializeArray();
                $.each(dataArray, function (index, item) {
                    data[item.name] = item.value
                });
                $.ajax({
                    url: url,
                    data: data,
                    success: successCallback,
                    dataType: "jsonp",
                    error: function (resp, text) {
                        console.log("mailchimp ajax submit error: " + text)
                    }
                });
                var submitMsg = "Submitting...";
                if (settings.language !== "en" && $.ajaxChimp.translations && $.ajaxChimp.translations[settings.language] && $.ajaxChimp.translations[settings.language]["submit"]) {
                    submitMsg = $.ajaxChimp.translations[settings.language]["submit"]
                }
                label.html(submitMsg).show(2e3);
                return false
            })
        });
        return this
    }
})(jQuery);


В итоге после отправки формы в консоль выводит mailchimp ajax submit error: parsererror, в строке console.log("mailchimp ajax submit error: " + text) из кода под спойлером...

Во вкладке NETWORK по запросу выводит {"result":"success"}

Кроме вас надеятся не на кого, выручайте!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.10.2016, 19:33
Ответы с готовыми решениями:

Обработка формы ajax
Здравствуйте, подскажите плиз. Не могу найти ошибку, видать знаний не хватает еще(( Мне необходимо обработать форму без обновления...

Валидация формы + ajax обработка
Имеется такая форма: html &lt;form method=&quot;post&quot; action=&quot;#&quot; id=&quot;callbacks&quot;&gt; &lt;div class=&quot;field half first&quot;&gt; &lt;label...

Передача данных формы и обработка их
Добрый день. Делаю передача данных формы, т.к. полей может быть различное кол-во по условию задачи, то делаю с помощью...

27
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
11.10.2016, 07:40
1) Какой Content-Type возвращает сервер?
2) Какая кодировка?

Добавлено через 41 секунду
И по адресу "algoritm.96.lt/main/php/subscribe.php?" не JSON, там ошибки.
1
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
11.10.2016, 08:35  [ТС]
Цитата Сообщение от Para bellum Посмотреть сообщение
Какой Content-Type возвращает сервер?
Content-Type:text/html; charset=utf-8

Цитата Сообщение от Para bellum Посмотреть сообщение
2) Какая кодировка?
У файлов - utf-8, в заголовках тоже она.
Цитата Сообщение от Para bellum Посмотреть сообщение
И по адресу "algoritm.96.lt/main/php/subscribe.php?" не JSON, там ошибки.
Пока что только на локальном сервере тестирую.
Кстати, по клику "Отправить" обращение идет к url-у http://algoritm.96.lt/main/php/subscribe.php?&c=jQuery210046877873642741874_1476163590775&EMAIL=123%40ya.ru&_=1476163590776. Что за параметры передаются, помимо EMAIL?
0
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
11.10.2016, 08:39  [ТС]
Вот скрины ответа полностью
Миниатюры
Обработка формы   Обработка формы   Обработка формы  

0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
11.10.2016, 09:02
Цитата Сообщение от Serj190492 Посмотреть сообщение
Content-Type:text/html
А надо, чтобы application/json приходил.
Цитата Сообщение от Serj190492 Посмотреть сообщение
Что за параметры передаются, помимо EMAIL?
Из-за типа JSONP, вестимо. Вы же к своему сайту запросы делаете? Тогда тип jsonp нет смысла использовать.
1
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
11.10.2016, 10:13  [ТС]
Цитата Сообщение от Para bellum Посмотреть сообщение
А надо, чтобы application/json приходил.
Это как-то так?
PHP
1
2
3
4
5
if ($db->Insert('subscribe', $mail)){
    $ret = array('result' => 'success');
    header('Content-Type: application/json');
    echo json_encode($ret);
}
Цитата Сообщение от Para bellum Посмотреть сообщение
тип jsonp нет смысла использовать
С этим не знаком, но догадываюсь, что нужно это
JavaScript
1
2
3
4
5
6
7
8
9
$.ajax({
                    url: url,
                    data: data,
                    success: successCallback,
                    dataType: "jsonp",
                    error: function (resp, text) {
                        console.log("mailchimp ajax submit error: " + text)
                    }
                });
Изменить на
JavaScript
1
2
3
4
5
6
7
8
9
$.ajax({
                    url: url,
                    data: data,
                    success: successCallback,
                    dataType: "json",
                    error: function (resp, text) {
                        console.log("mailchimp ajax submit error: " + text)
                    }
                });
Добавлено через 2 минуты
Цитата Сообщение от Serj190492 Посмотреть сообщение
но догадываюсь
не, не догадываюсь)) Сделал так - всё равно тот же адрес)
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
11.10.2016, 10:15
Цитата Сообщение от Serj190492 Посмотреть сообщение
Это как-то так?
Да. Главное, чтобы вывода не было до отправки заголовка.

Ну да, всё верно.
1
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
11.10.2016, 10:49  [ТС]
Цитата Сообщение от Para bellum Посмотреть сообщение
Ну да, всё верно.
Сделал все так. Теперь application/json приходит. Но:

1) Адрес по-прежнему Request URL:[url]http://algoritm.96.lt/main/php/subscribe.php?&c=jQuery210031910736720349053_1476170652464&EMAIL=123%40ya.ru&_=1476170652466[/url]

2) В ответе сервера вроде всё так же: {"result":"success"}

3) Но и в консоли всё так же ошибка mailchimp ajax submit error: parsererror

Добавлено через 12 минут
p.s.
При этом записи в БД добавляются, но внешне ничего не происходит... Форма не скрывается, сообщение не выводится. Как будто кнопку не нажимали.
0
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
13.10.2016, 14:16  [ТС]
Я так понимаю дальше проблема в JS.

Модераторы, перенесите тему в раздел JavaScript, может там кто чем поможет)
0
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
18.10.2016, 13:19  [ТС]
UP!
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
19.10.2016, 06:55
Где форма-то? На сайте она скрыта, а при каждом заходе из консоли её отображать лениво. Возможно, от сервера некорректный JSON приходит. Может символ какой добавляется...
1
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
19.10.2016, 11:16  [ТС]
Цитата Сообщение от Para bellum Посмотреть сообщение
На сайте она скрыта
Просто этот сайт запущен, полностью рабочий. Поэтому форму, которая не работает, я скрыл.

Может можно в виде файлов скинуть? Или всё-таки на время на сайте раскомментировать?

Добавлено через 40 минут
Para bellum, http://algoritm.96.lt/main/
Раскомментировал.
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
19.10.2016, 11:26
По прежнему по адресу "subscribe.php" возвращается заголовок:
Code
1
Content-Type: text/html
А должно быть:
Code
1
Content-Type: application/json
И ошибки там так и выводятся:
Warning: require_once(config.php): failed to open stream: No such file or directory in /***/models/M_MSQL.php on line 2
Fatal error: require_once(): Failed opening required 'config.php' (include_path='.:/opt/php-5.5/pear') in /***/models/M_MSQL.php on line 2
Сделайте, чтобы заголовок правильный был и ошибки исправьте. Потом напишите, ещё раз гляну.
1
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
19.10.2016, 11:40  [ТС]
Цитата Сообщение от Para bellum Посмотреть сообщение
Сделайте, чтобы заголовок правильный был и ошибки исправьте
Да, мой косяк - на локальном поправил, туда не выложил... Заголовок поправил.

А с ошибками странности какие-то: у меня они нигде не выводились. Скопировал файл 'config' в другую директорию, сейчас должна ошибка пропасть. Не могу понять, почему у меня она не выводилась нигде?
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
19.10.2016, 12:11
Заголовок верный. А в ответе, заместо JSON, возвращается:
Unknown column 'EMAIL' in 'field list'
Цитата Сообщение от Serj190492 Посмотреть сообщение
почему у меня она не выводилась нигде?
В "Инструментах разрабочика" должно быть видно, если во вкладке "Network" (Chrome) кликнуть по адресу запроса, а потом на вкладке "Response".
1
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
19.10.2016, 15:30  [ТС]
Цитата Сообщение от Para bellum Посмотреть сообщение
Unknown column 'EMAIL' in 'field list'
Опять моя невнимательность. Теперь возвращает {"result":"success"}
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
19.10.2016, 15:39
А почему Вы не поменяли тип "jsonp" на "json" в файле jquery.ajaxchimp.min.js?
1
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
19.10.2016, 16:37  [ТС]
Цитата Сообщение от Para bellum Посмотреть сообщение
А почему Вы не поменяли тип "jsonp" на "json" в файле jquery.ajaxchimp.min.js?
Посмотрите тут Обработка формы
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
19.10.2016, 16:41
Цитата Сообщение от Serj190492 Посмотреть сообщение
Посмотрите тут
Помню. Только что это изменит? У Вас на сервере в JS-файле jsonp указан. Следовательно, и клиент ожидает сгенерированую callback-функцию с сервера.
1
 Аватар для Serj190492
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
19.10.2016, 19:52  [ТС]
Цитата Сообщение от Para bellum Посмотреть сообщение
У Вас на сервере в JS-файле jsonp указан. Следовательно, и клиент ожидает сгенерированую callback-функцию с сервера
Можно об это немного подробнее, далёк я от JS, jsonp...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.10.2016, 19:52
Помогаю со студенческими работами здесь

AJAX полная обработка формы
Ребят можно ли как-то обработать форму с помощью пхп неким ajax? то есть отправить значения пхп программе как и при обычном использований...

Обработка формы без перезагрузки страницы
Здравствуйте. Нужно получить данные из раскрывающегося списка select, обработать их в php скрипте и вернуть результат без перезагрузки. ...

Обработка формы на Query: способы решения
Всем привет! Изучая, столкнулся с такой задачей: Есть форма: Изначально есть блок инпУтов: &lt;!-- Ввод адрес старта --&gt; ...

Обработка события Click, вставка html после генерации и обработка этого кода
Подскажите пожалуйста как заставить работать эту часть кода 18 строка $(&quot;.image&quot;).click(function() { ...

Обработка формы
Здравствуйте, уважаемые программисты. Помогите, пожалуйста, нужно написать скрипт на JS для обработки формы. Есть три поля: Фамилия ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru