Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
1

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

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

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

Никак не могу победить обработку формы. Проблема еще в том, что 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.10.2016, 19:33
Ответы с готовыми решениями:

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

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

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

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

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

Добавлено через 41 секунду
И по адресу "algoritm.96.lt/main/php/subscribe.php?" не JSON, там ошибки.
1
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
11.10.2016, 08:35  [ТС] 3
Цитата Сообщение от 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
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
11.10.2016, 08:39  [ТС] 4
Вот скрины ответа полностью
Миниатюры
Обработка формы   Обработка формы   Обработка формы  

0
Эксперт PHP
5753 / 4133 / 1507
Регистрация: 06.01.2011
Сообщений: 11,276
11.10.2016, 09:02 5
Цитата Сообщение от Serj190492 Посмотреть сообщение
Content-Type:text/html
А надо, чтобы application/json приходил.
Цитата Сообщение от Serj190492 Посмотреть сообщение
Что за параметры передаются, помимо EMAIL?
Из-за типа JSONP, вестимо. Вы же к своему сайту запросы делаете? Тогда тип jsonp нет смысла использовать.
1
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
11.10.2016, 10:13  [ТС] 6
Цитата Сообщение от 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
5753 / 4133 / 1507
Регистрация: 06.01.2011
Сообщений: 11,276
11.10.2016, 10:15 7
Цитата Сообщение от Serj190492 Посмотреть сообщение
Это как-то так?
Да. Главное, чтобы вывода не было до отправки заголовка.

Ну да, всё верно.
1
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
11.10.2016, 10:49  [ТС] 8
Цитата Сообщение от 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
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
13.10.2016, 14:16  [ТС] 9
Я так понимаю дальше проблема в JS.

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

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

Добавлено через 40 минут
Para bellum, http://algoritm.96.lt/main/
Раскомментировал.
0
Эксперт PHP
5753 / 4133 / 1507
Регистрация: 06.01.2011
Сообщений: 11,276
19.10.2016, 11:26 13
По прежнему по адресу "subscribe.php" возвращается заголовок:
Код
Content-Type: text/html
А должно быть:
Код
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
160 / 159 / 59
Регистрация: 19.02.2015
Сообщений: 830
19.10.2016, 11:40  [ТС] 14
Цитата Сообщение от Para bellum Посмотреть сообщение
Сделайте, чтобы заголовок правильный был и ошибки исправьте
Да, мой косяк - на локальном поправил, туда не выложил... Заголовок поправил.

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

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

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

Обработка события Click, вставка html после генерации и обработка этого кода
Подскажите пожалуйста как заставить работать эту часть кода 18 строка ...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru