Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 2 / 0
Регистрация: 03.03.2014
Сообщений: 34
1

Не проходит post запрос через ajax

05.06.2017, 18:31. Показов 685. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, делаю загрузку аватара. Всё работало, решил сделать через popup окно с помощью js и ajax. Всё почти работает, php не ловит POST запрос.
Помогите пожалуйста
Код html:
HTML5
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
90
91
92
93
94
<?php
require('engine/auth/db.php');
 
    ?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="style/style.css">
<link rel="stylesheet" type="text/css" href="style/profile.css">
<script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
    $('#load_avatars').submit(function(e){
        //отменяем стандартное действие при отправке формы
        e.preventDefault();
        $("body div.lc_popup .errors").remove(); // удаляем ошибки перед отправкой
        //берем из формы метод передачи данных
        var m_method=$(this).attr('method');
        //получаем адрес скрипта на сервере, куда нужно отправить форму
        var m_action=$(this).attr('action');
        //получаем данные, введенные пользователем в формате input1=value1&input2=value2...,
        //то есть в стандартном формате передачи данных формы
        var m_data=$(this).serialize();
        $.ajax({
            type: m_method,
            url: m_action,
            data: m_data,
            success: function(result){
            $("body div.lc_popup").append(result);
            }
        });
        
    });
    //script for popups
    $('a.change_a').click(function () {
        $('div.'+$(this).attr("rel")).fadeIn(500);
        $("body").append("<div id='overlay'></div>");
        $('#overlay').show().css({'filter' : 'alpha(opacity=80)'});
        return false;               
    }); 
    $('a.close').click(function () {
        $(this).parent().fadeOut(100);
        $('#overlay').remove('#overlay');
        $("body div.lc_popup .errors").remove(); // удаляем ошибки при нажатии крестика
        return false;
    });
});
</script>
    <title>Личный Кабинет</title>  
</head>
<body>
 
<div class="lc">
<div class="lc_header">
<div class="lc_foto thumbs"><?php
         $data = R::load('users', $_SESSION['logged_user']->id);
         if ($data['avatar'] == 0)   $Avatar = 0; 
         else $Avatar = $data['avatar'].'/'.$data['id'];
        
        echo '<div class="caption">
        <span class="title"><a class="change_a" rel="lc_popup" href="#">Сменить аватар</a></span>
    </div>' ;
         echo '<img src="engine/profile/avatar/'.$Avatar.'.jpg" width="200" height="200" alt="Аватар" align="left">'; ?>
</div></div>
<div class="lc_gcontent">
<div class="lc_content">
    <div class="lc_inf">
    <div class="nick">Ваш логин: <?php  echo $_SESSION['logged_user']->login; ?> </div>
    <div class="nick">Дата регистрации: <?php
     $data = R::load('users', $_SESSION['logged_user']->id);
     echo $data['dates'];
         ?> </div>
 <?php
     $data = R::load('users', $_SESSION['logged_user']->id);
     echo $data['email'];
         ?>
         </div>
    </div>
    </div>
</div>
</div>
<div class="lc_popup">
        <a class="close" href="#">Close</a>
        <div class="load_avatar">
<form method="post" action="engine/profile/avatar.php" id="load_avatars">
<input type="file" name="avatar">
<input type="submit" name="enter" value="Сохранить">
</div>
</form>         
        </div>
</body>
</html>
А вот сам php скрипт
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
<?php
require('db.php');
if ($_POST['enter'])
{
    $data = R::load('users', $_SESSION['logged_user']->id);
    if ($_FILES['avatar']['tmp_name']) {
        if ($_FILES['avatar']['type'] != 'image/jpeg')
        {
            echo '<div class="errors">Не верный тип изображения</div>';
        }
        if ($_FILES['avatar']['size'] > 200000){
            echo '<div class="errors">Размер изображения слишком большой</div>';
        } 
        $Image = imagecreatefromjpeg($_FILES['avatar']['tmp_name']);
        $Size = getimagesize($_FILES['avatar']['tmp_name']);
        $Tmp = imagecreatetruecolor(200, 200);
        imagecopyresampled($Tmp, $Image, 0, 0, 0, 0, 200, 200, $Size[0], $Size[1]);
        if ($data["avatar"] == 0) {
            $Files = glob('avatar/*', GLOB_ONLYDIR);
            $Num  = 0;
                        foreach($Files as $num => $Dir) {
                $Num ++;
                $Count = sizeof(glob($Dir.'/*.*'));
                if ($Count < 250) {
                    $data["avatar"] = end(explode('/',$Dir));
                                $av = R::load('users', $_SESSION['logged_user']->id);
            $av->avatar = $data['avatar'] ;
            R::store($av);
                }
            }
        } 
        if (!empty($data['avatar'])) {
            $Download = 'avatar/'.$data["avatar"].'/'.$data["id"];
            imagejpeg($Tmp, $Download.'.jpg');
        }
        imagedestroy($Image);
        imagedestroy($Tmp);
        clearstatcache(); // очищаем кэш
        header('Location: /alimius/profile.php'); // переходим мгновенно на профиль, чтобы аватар обновился, умнее ничего не придумал)
    }
}
?>
Добавлено через 25 минут
Забыл добавить enctype="multipart/form-data"
<form method="post" action="engine/profile/avatar.php" id="load_avatars">
Сейчас он выглядит
<form method="post" action="engine/profile/avatar.php" enctype="multipart/form-data" id="load_avatars">
Но всё равно не работает
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.06.2017, 18:31
Ответы с готовыми решениями:

POST - запрос и ajax
Ребят, запутался с Пост запросами начисто. Сначала задача: изучаю XMLHttpRequest, и решил...

AJAX - выполнить POST запрос
есть такой PHP код: ... $limit = isset($_POST) ? ($_POST + 10) : 5; ... Как мне его выполнить...

Неправильно работает post запрос Ajax к php
JS-функция делает post запрос к файлу process.php который проверяет наличие пользователя в БД. Если...

Отправка POST запроса через AJAX
Доброго всем времени суток. Проблема заключается в следующем: JavaScript-сценарий разбирает...

2
1931 / 1522 / 703
Регистрация: 17.11.2012
Сообщений: 6,585
05.06.2017, 19:17 2
Цитата Сообщение от Vanlick Посмотреть сообщение
var m_data=$(this).serialize();
так файл не передадите.
используйте FormData()
0
1 / 2 / 0
Регистрация: 03.03.2014
Сообщений: 34
06.06.2017, 13:39  [ТС] 3
Нашёл скрипт
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$(function(){
  $('#my_form').on('submit', function(e){
    e.preventDefault();
    var $that = $(this),
    formData = new FormData($that.get(0)); // создаем новый экземпляр объекта и передаем ему нашу форму (*)
    $.ajax({
      url: $that.attr('action'),
      type: $that.attr('method'),
      contentType: false, // важно - убираем форматирование данных по умолчанию
      processData: false, // важно - убираем преобразование строк по умолчанию
      data: formData,
      dataType: 'json',
      success: function(json){
        if(json){
          $that.replaceWith(json);
        }
      }
    });
  });
});
В ajax я не силён, помогите пожалуйста что заменить и что подправить, чтобы всё работало?
Пробовал просто добавить после другой функции и создать еще одну форму для выбора файла, не получилось.
0
06.06.2017, 13:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.06.2017, 13:39
Помогаю со студенческими работами здесь

Передача json данных методом POST через AJAX
нужно передать данные на сервер методом post передача на сервер req.open(&quot;POST&quot;,...

Странная ошибка при отправке POST через AJAX
var xmlhttp; try { xmlhttp = new ActiveXObject(&quot;Msxml2.XMLHTTP&quot;); } catch...

Как из Delphi через POST-запрос передать значение в переменнную PHP
Допустим из делфи мне нужно передать текст &quot;12345&quot;. Как записать передаваемый текст из делфи в...

Как узнать на стороне сервера, какой тип данных передан через ajax запрос
Здравствуйте друзья и снова к вам с просторов поисковиков. В общем у меня такая задача. Я посылаю...


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

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