Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
4 / 3 / 2
Регистрация: 11.08.2016
Сообщений: 352

ООП не предаются данные (AJAX )

13.07.2019, 16:39. Показов 1473. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Возникла проблема и не могу понять в чем её причина. Пишу сайт с логикой MVC. Вот AJAX запрос вместе с jQuery логикой:
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
function proverka(){
     $('#close').empty();
     $('#close').fadeIn();
     $a= $('#checkbox');
     $b= $('#debag');
     $c= $('#regoogle');
     $d= $('#named').val();
     $e= $('#sold').val();
     $f= $('#param').val();
     $pattern = /^([a-z0-9_\.-])+@[a-z0-9-]+\.([a-z]{2,4}\.)?[a-z]{2,4}$/i;
     if(!$a.is(':checked')){
         $a=1;
         $('#close').html('Обработка персональных данных не разрешена, поставьте флажок').fadeOut(5000);
     }
     else if(!$b.is(':checked')){
         $b=1
         $('#close').html('Вы не согласились на сбор дополнительных данных, поставьте флажок').fadeOut(5000);
     }
     else if(!$c.is(':checked')){
         $c=1
         $('#close').html('Вы не понимаете, что на данной странице задействован механизм проверки спам-ботов, поставьте флажок').hide(5000);
     }
     else if(($d.length)<2){
         $('#close').html('Это не имя').fadeOut(5000);
     }
     else if(!($pattern.test($e))) {
         $('#close').html('Похоже, что это не e-mail').fadeOut(5000);
     }
     else if(($f.length)<=120){
         $('#close').html('Текст слишком маленький, минимальный объем от 121 символа').fadeOut(5000);
     }
     else if (($f.length)>25000){
         $('#close').html('Текст слишком длинный, максимальный объем 25000 символов').fadeOut(5000);
     }
     else{
         $('#close').html('Поздравляем, все проверки на клиенте пройдены, передаем данные на сервер!').fadeOut(5000);
         $.ajax({
             url:'/feedback',
             type: 'POST',
             dataType: 'JSON',
             data: ({a:$a, b:$b, c:$c, d:$d, e:$e, f:$f}),
             contentType: false,
             cache: false,
             processData: false,
             success: function(pay){
                     $('#close').fadeIn(200);
                     $('#close').html(pay).fadeOut(5000);
             },
         });
     }
}
В контроллере:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public function feedbackAction(){
             if(!empty($_POST)){
                 var_dump($_POST);
                 if (!($_SESSION['second']+1800>time())){
                     $this->view->message('error', 'Сообщение уже было отправлено, количество попыток ограничено :(');
                 }
                 elseif (!$this->model->validForm()){
                     $this->view->message('error', $this->model->error);
                 }
                 else{
                     $this->view->message('success', $this->model->ok);
                 }
             }
             $this->view->layout= 'answer';
             $this->view->render('Обратная связь | Программирование');
         }
Так и вот в модели, но почему-то не работает:
PHP
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
 public function validForm(){
             $arr= filter_input_array(INPUT_POST,[
                 'a'=>FILTER_VALIDATE_INT,
                 'b'=>FILTER_VALIDATE_INT,
                 'c'=>FILTER_VALIDATE_INT,
                 'd'=>FILTER_SANITIZE_STRING,
                 'e'=>FILTER_SANITIZE_EMAIL,
                 'f'=>FILTER_SANITIZE_STRING,
             ]);
             if($arr['a']!=1){ 
                 $this->error='Только не говори, что не ждал... Проверка на сервере дала ошибку, проверьте флажок: обработка персональных данных, он должен быть синим... Однако странно, почему Вас об этом не предупредил JavaScript? Может быть Вы начинающий хакер? Ладно, шутка... мало ли ';
                 return false;
             }
             elseif($arr['b']!=1){
                 $this->error='Только не говори, что не ждал... Проверка на сервере дала ошибку, проверьте флажок: сбор дополнительных данных, он должен быть синим... Однако странно, почему Вас об этом не предупредил JavaScript? Может быть Вы начинающий хакер? Ладно, шутка... мало ли';
                 return false;
             }
             elseif($arr['c']!=1){
                 $this->error='Только не говори, что не ждал... Проверка на сервере дала ошибку, проверьте флажок: согласие с автономной reCAPTCHA v3, он должен быть синим... Однако странно, почему Вас об этом не предупредил JavaScript? Может быть Вы начинающий хакер? Ладно, шутка... мало ли'; 
                 return false; 
             }
             elseif (mb_strlen($arr['d'])<2){
                 $this->error='Ой, а это не имя... Но заметьте, что проверка произошла на сервере, а это не хорошо... У нас есть подозрения...';
                 return false;
             }
             elseif ($arr['e']==false){
                 $this->error='На e-mail это не похоже, проверьте, пожалуйста... Но заметьте, что проверка произошла на сервере, а это не хорошо... У нас есть подозрения...';
                 return false;
             }
             elseif(mb_strlen($arr['f'])<=120){
                 $this->error='Слишком короткий текст (<= 120 символов)...  Но заметьте, что проверка произошла на сервере, а это не хорошо... У нас есть подозрения...';
                 return false;
             }
             elseif(mb_strlen($arr['f'])>=2500){
                  $this->error='Вы точно все сказали? Слишком динный текст (>=25000 символов)...  Но заметьте, что проверка произошла на сервере, а это не хорошо... У нас есть подозрения...';
                  return false;
             }
             else{
                 $to= "bestprogramm@yandex.ua";
                 $subject = "Вопрос от пользователя".$arr['d'];
                 $message = 'Имя:'.$arr['d'].'<br>E-mail:'.$arr['e'].'<br>Текст проблемы:'.$arr['f'].'<br> Флажки установлены:'.$arr['a'].$arr['b'].$arr['c'].'<br><p>Дополнительная информация о клиенте:<br>IP:'.$_SERVER['GEOIP_ADDR'].'<br>О браузере:'.$_SERVER['HTTP_USER_AGENT'].'<br>Местоположение пользователя:'.$_SERVER['GEOIP_COUNTRY_NAME'].$_SERVER['GEOIP_REGION_NAME'].$_SERVER['GEOIP_CITY'].'</p>';
                 mail($to, $subject, $message);
                 $this->ok='Такого не бывает... Все валидно, данные отправлены администрации и скоро Вам придет ответ';
                 return true;
         }
     }
Вообще не выводит сообщения с сервера и ошибок нет, но почему не понятно... Буду рад любой помощи...
Заранее благодарен!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.07.2019, 16:39
Ответы с готовыми решениями:

AJAX + ООП
Кто может сказать что происходит в такой ситуации: ajax-ом опрашиваю один Сервер получаю данные, потом данные посылаю другому серверу в...

Как использовать AJAX в MVC соблюдая ООП?
Делаю сайт с соблюдением MVC т.е. у меня есть одна страница входа и в зависимости от параметров переданных на нее, создается необходимый...

Коды воздействуют на данные - структурное программирование, Данные управляют кодом - ООП
Это из книги Шилдта, я думал что всегда коды управляют данными, короче кто понимает обьясните

14
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
13.07.2019, 19:45
Цитата Сообщение от Uni_programist Посмотреть сообщение
Вообще не выводит сообщения с сервера и ошибок нет, но почему не понятно
http://phpfaq.ru/debug
0
14 / 50 / 3
Регистрация: 26.12.2009
Сообщений: 406
17.07.2019, 15:08
Дебажьте.
Массив $_POST заполнен в feedbackAction?
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,230
18.07.2019, 00:58
в JS же так не пишут, это вообще законно?
JavaScript
1
$a= $('#checkbox');
так надо:
JavaScript
1
a = $('#checkbox');
а проверяется так:
JavaScript
1
if (a.prop('checked'))    {...}
0
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
18.07.2019, 11:17
Цитата Сообщение от полудух Посмотреть сообщение
в JS же так не пишут,
100%
на без "use strict" пройдет
а вообще, добавить var or let и будет аля php
let $a = 'a';
console.log($a);
0
4 / 3 / 2
Регистрация: 11.08.2016
Сообщений: 352
18.07.2019, 21:46  [ТС]
полудух,
Цитата Сообщение от полудух Посмотреть сообщение
а проверяется так:
А как же псевдо элемент? В том смысле ,что:
JavaScript
1
if (a.prop(':checked'))    {...}
,а не:
JavaScript
1
if (a.prop('checked'))    {...}
Эту проблему я решил, но теперь есть другая... В некоторых браузерах зависает и непонятно почему, хотя и иногда исполняется: AJAX - зависает запрос (тут я расписал суть проблемы)
Цитата Сообщение от Madrid Посмотреть сообщение
Массив $_POST заполнен в feedbackAction?
Да, но он не проявил на тот момент суперглобальные свойства, пришлось сделать так:
PHP
1
2
3
elseif (!$this->model->validForm($_POST)){
                     $this->view->message('error', $this->model->error);
                 }
PHP
1
2
3
public function validForm($posted){
  //тут колдуем с массивами и отправляем сообщение
}
Фактически пришлось создать два массива в одном данные, в другом фильтры, а на выходе 3-й массив и вот уж из него берем значения, уж не знаю можно ли оптимизировать или нет?
fanatikus,
Цитата Сообщение от fanatikus Посмотреть сообщение
на без "use strict" пройдет
а вообще, добавить var or let и будет аля php
Но ведь в jQuery переменные начинаются с $? Или как я понимаю, объявляются переменные без jQuery...
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,230
18.07.2019, 21:50
Цитата Сообщение от Uni_programist Посмотреть сообщение
А как же псевдо элемент?
у меня без него работает
https://ruseller.com/jquery?id=44
0
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
18.07.2019, 22:17
Цитата Сообщение от Uni_programist Посмотреть сообщение
Но ведь в jQuery переменные начинаются с $?
кто вам такое сказал?
в jquery, $ это функция.
точнее, псевдоним функции jQuery
в javascript - $ просто символ

Добавлено через 4 минуты
Цитата Сообщение от Uni_programist Посмотреть сообщение
Или как я понимаю, объявляются переменные без jQuery...
а вот это не понял?
в javascript, переменные объявляются
let a; или с присваиванием let a = 'a';
или
var a; var a = 'a';

Добавлено через 8 минут
Цитата Сообщение от полудух Посмотреть сообщение
а проверяется так:

if (a.prop('checked')) * *{...}
верно
но можно и как у т.с
.is(':checked')

Добавлено через 10 минут
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
// Define a local copy of jQuery
jQuery = function( selector, context ) {
    // The jQuery object is actually just the init constructor 'enhanced'
    // Need init if jQuery is called (just allow error to be thrown if not included)
    return new jQuery.fn.init( selector, context );
},
 
// Expose jQuery and $ identifiers, even in
// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
// and CommonJS for browser emulators (#13566)
if ( typeof noGlobal === strundefined ) {
    window.jQuery = window.$ = jQuery;
}
0
4 / 3 / 2
Регистрация: 11.08.2016
Сообщений: 352
18.07.2019, 22:43  [ТС]
fanatikus, т.е фактически все правильно, кроме объявления переменных? Но как быть с зависанием, я переписал код:
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
function proverka(){
     $('#close').empty();
     $('#close').fadeIn();
     var fact;
     var a= $('#checkbox');
     var b= $('#debag');
     var c= $('#regoogle');
     var d= $('#named').val();
     var e= $('#sold').val();
     var f= $('#param').val();
     $pattern = /^([a-z0-9_\.-])+@[a-z0-9-]+\.([a-z]{2,4}\.)?[a-z]{2,4}$/i;
     if(!a.is(':checked')){
         $('#close').html('Обработка персональных данных не разрешена, поставьте флажок').fadeOut(5000);
     }
     else if(!b.is(':checked')){
         $('#close').html('Вы не согласились на сбор дополнительных данных, поставьте флажок').fadeOut(5000);
     }
     else if(!c.is(':checked')){
         $('#close').html('Вы не понимаете, что на данной странице задействован механизм проверки спам-ботов, поставьте флажок').hide(5000);
     }
     else if((d.length)<2){
         $('#close').html('Это не имя').fadeOut(5000);
     }
     else if(!($pattern.test(e))) {
         $('#close').html('Похоже, что это не e-mail').fadeOut(5000);
     }
     else if((f.length)<=120){
         $('#close').html('Текст слишком маленький, минимальный объем от 121 символа').fadeOut(5000);
     }
     else if ((f.length)>25000){
         $('#close').html('Текст слишком длинный, максимальный объем 25000 символов').fadeOut(5000);
     }
     else{
         $.ajax({
             url:'/feedback',
             method: 'POST',
             dataType: 'JSON',
             data: {flaga:1, flagb:1, flagc:1, name:d, email:e, texting:f},
             success: function(pay){
                 $('#close').empty();
                 $('#close').fadeIn();
                 var newData = JSON.stringify(pay);
                 fact= $.parseJSON(newData);
                 $('#close').html(fact.massage).fadeOut(5000); 
             },
         });
     }
}
в каких то браузерах работает, а в каких-то нет, где-то и вовсе работает на половину (все работает, кроме вывода сообщения об успехе), почему так непонятно? let попробовать что ли иногда такой трюк работал...?
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,230
18.07.2019, 22:47
сделайте, как тут
0
4 / 3 / 2
Регистрация: 11.08.2016
Сообщений: 352
19.07.2019, 22:25  [ТС]
полудух, по 5-ому примеру?
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,230
19.07.2019, 23:19
я без JSON юзаю
в ПХП:
PHP
1
json_encode(['ok' => 'html', 'html' => 'blabla'], $flags);
в JS:
JavaScript
1
res = JSON.parse(data);
и получаю: res.ok, res.html, res.page, итд
0
4 / 3 / 2
Регистрация: 11.08.2016
Сообщений: 352
25.07.2019, 21:08  [ТС]
полудух, извините, что так долго не отвечал. Я занимался магией (весь этот период) и честно говоря все получилось, но нет понимания, как все это работает (код в спойлере):
Кликните здесь для просмотра всего текста

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
function proverka(){
     $('#close').empty();
     $('#close').fadeIn();
     var fact;
     var a= $('#checkbox');
     var b= $('#debag');
     var c= $('#regoogle');
     var d= $('#named').val();
     var e= $('#sold').val();
     var f= $('#param').val();
     $pattern = /^([a-z0-9_\.-])+@[a-z0-9-]+\.([a-z]{2,4}\.)?[a-z]{2,4}$/i;
     if(!a.is(':checked')){
         $('#close').html('Обработка персональных данных не разрешена, поставьте флажок').fadeOut(5000);
     }
     else if(!b.is(':checked')){
         $('#close').html('Вы не согласились на сбор дополнительных данных, поставьте флажок').fadeOut(5000);
     }
     else if(!c.is(':checked')){
         $('#close').html('Вы не понимаете, что на данной странице задействован механизм проверки спам-ботов, поставьте флажок').hide(5000);
     }
     else if((d.length)<2){
         $('#close').html('Это не имя').fadeOut(5000);
     }
     else if(!($pattern.test(e))) {
         $('#close').html('Похоже, что это не e-mail').fadeOut(5000);
     }
     else if((f.length)<=120){
         $('#close').html('Текст слишком маленький, минимальный объем от 121 символа').fadeOut(5000);
     }
     else if ((f.length)>25000){
         $('#close').html('Текст слишком длинный, максимальный объем 25000 символов').fadeOut(5000);
     }
     else{
         $.ajax({
             url:'/feedback',
             method: 'POST',
             dataType: 'JSON',
             data: {flaga:1, flagb:1, flagc:1, name:d, email:e, texting:f},
             success: function(pay){
                 $('#close').empty();
                 $('#close').fadeIn();
                 $('#close').html(pay.massage).fadeOut(5000); 
             },
             error: function(){
                 alert('Ошибочка... ей присвоен код: #1. Передайте этот код в поддержку и мы обязательно все починим!')
             },
         });
     }
}

И все работает, как видно JSON.parse() отсутствует... А я имею доступ по ключу... Как так? Ведь JSON.parse() разбивает целый объект на ключ и значение?
0
 Аватар для fanatikus
1932 / 1523 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
25.07.2019, 21:15
Цитата Сообщение от Uni_programist Посмотреть сообщение
как видно JSON.parse() отсутствует
ну да
потому что
Цитата Сообщение от Uni_programist Посмотреть сообщение
dataType: 'JSON',
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,230
25.07.2019, 22:27
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
//##############################################################################
// перегнать serializeArray() из arr[0].name/arr[0].value -> arr['name'] = value
function form2array(form_id)
{
    var result = {};
    $.each($(form_id).serializeArray(),
    function()
    {
        result[this.name] = this.value;
    });
 
    return result;
}
//##############################################################################
function isempty(str)
{
    if (str === undefined)      {return false;} // без этого trim() ругается на undefined
 
    str = str.trim();
    // false = НЕ пустая строка
    if (str.length > 0)
        {return false;}
    else
        {return true;}
}
//##############################################################################
 
var err = [], formM = form2array('#form_body');
 
if (isempty(formM.name1))    {err.push('<q>Имя</q> не указано');}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.07.2019, 22:27
Помогаю со студенческими работами здесь

Не отправляются данные (ajax)
Написал чат, но не могу сделать возможность удалять сообщения хочу сделать это с помощью аякс, jQuery не знаю, но нашел в сети понятный...

Ajax не возвращает данные
Есть первый select: &lt;select name='ficid' id='select' onchange='javascript:selectOne();'&gt; &lt;option value=''&gt;&lt;/option&gt; ...

Не передаются данные $.ajax()
Не получается передать две переменные для обработки их в БД (board_db.php) Оба файла находется в одной папке &lt;script...

$.ajax не возвращает данные
Доброго времени суток. Столкнулся со странной проблемой. Добавляю проверку на корректность формы регистрации, другого способа кроме ajax...

Ajax не отправляет данные
Ранее, ниже указанный код работал без проблем, но в один момент, что-то ему начало мешать :( Ошибка заключается в том что, при вводе...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru