Форум программистов, компьютерный форум, киберфорум
Наши страницы
jQuery
Войти
Регистрация
Восстановить пароль
 
Pisusio
0 / 0 / 0
Регистрация: 11.01.2019
Сообщений: 3
1

Передача и вывод массива AJAX

11.01.2019, 23:15. Просмотров 262. Ответов 4

Всем, здравствуйте! Столкнулся с проблемой при выводе массива через AJAX. Есть index.php, где есть две формы:
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
<!doctype html>
<html>
<head>
    <title>Main</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
</head>
<body>
<script type="text/javascript" src="jquery.js"></script>
<script src="ajax.js"></script>
 
    <form  method="get" id="ajax_form" action="">
        <input name="id" class="form-group" type="text" placeholder="Номер заказа"><br>
        <input class="form-group" name="name" type="text" placeholder="Название товара"><br>
        <input name="price" class="form-group" pattern="^[ 0-9]+$" placeholder="Цена"><br>
        <input class="form-group" name="count" pattern="^[ 0-9]+$" placeholder="Колличество товара"><br>
        <input class="form-group" name="operator" type="text" placeholder="Имя оператора"><br>
        <p>Колличесто > 2 и id оператора 10 или 12: <input class="form-group" type="checkbox" name="check" value="1"></p>
        <input name="search" id="btn"  type="submit" value="Найти">
 
    </form>
<hr>
 
<div id="result_form"></div>
 
<hr>
 
<form id="a_form" method="get" action="">
    <input name="name_of" type="text" placeholder="Название товара">
    <input type="submit" id="btn1" value="Отобразить">
</form>
 
<div id="form"></div>
 
</body>
</html>
Вот ajax.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
$( document ).ready(function() {
    $("#btn").click(
        function(){
            sendAjaxForm('result_form', 'ajax_form', 'action_ajax_form.php');
            return false;
        }
    );
});
 
function sendAjaxForm(result_form, ajax_form, url) {
    $.ajax({
        url:     url,
        type:     "GET",
        dataType: "html",
        data: $("#"+ajax_form).serialize(),
        success: function(dataArray) {
            result = $.parseJSON(dataArray);
            $('#result_form').html('Название товара: '+result.name+'<br>Цена: '+result.price+'<br>Колличество товара: '+result.count+'Hi!');
        },
        error: function(response) {
            $('#result_form').html('Ошибка. Данные не отправлены.');
        }
    });
}
 
 
 
$( document ).ready(function() {
    $("#btn1").click(
        function(){
            sendAjaxForm('form', 'a_form', 'action_ajax_form.php');
            return false;
        }
    );
});
 
function sendAjaxForm(form, a_form, url) {
    $.ajax({
        url:     url,
        type:     "GET",
        dataType: "html",
        data: $("#"+a_form).serialize(),
        success: function(data) {
            result = $.parseJSON(data);
            $('#form').html('Название товара: '+result.name+'<br>Цена: '+result.price+'<br>Колличество товара: '+result.count);
        },
        error: function(response) {
            $('#form').html('Ошибка. Данные не отправлены.');
        }
    });
А вот сам обработчик:
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
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
<?php
 
require_once "DB.php";
 
if (!empty($_GET['id']) or !empty($_GET['name'])
    or !empty($_GET['price']) or !empty($_GET['count']) or !empty($_GET['operator']) or !empty($_GET['check'])) {
 
    $results = offer();
    if (empty($results))
    {
        $result = [];
        echo json_encode($result);
    }
    echo json_encode($result);
}
 
if (isset($_GET['name_of']))
{
    function off()
    {
        $offer_id = DB::conn()->prepare('SELECT id FROM offers WHERE name=?');
        $offer_id->execute(array(trim($_GET['name_of'])));
        $offer_id = $offer_id->fetch()['id'];
        if (empty($offer_id)) {
            $result = [];
        }
        $req = DB::conn()->prepare('SELECT `count`, price FROM requests WHERE offer_id=?');
        $req->execute(array($offer_id));
        if (empty($req = $req->fetch())) {
            $result = [];
        } else {
            $result = array(
                'name' => trim($_GET['name_of']),
                'count' => $req['count'],
                'price' => $req['price']
            );
        }
        return $result;
    }
    $result = off();
    echo json_encode($result);
}
//функции обработки 1-й формы
function offer()
{
    if(isset($_GET['search']) and (!empty($_GET['id']) or !empty($_GET['name'])
            or !empty($_GET['price']) or !empty($_GET['count']) or !empty($_GET['operator']) or !empty($_GET['check'])))
    {
        $offers = [];
        if (!empty($_GET['check']) and empty($_GET['id'])and empty($_GET['name'])
            and empty($_GET['price'])and empty($_GET['count'])and empty($_GET['operator']))
        {
            $request = requests(NULL, NULL);
            if (empty($request))
            {
                $offers = [];
                return $offers;
            }
            foreach ($request as $row)
            {
                $offer_name = offers($row['offer_id'])['name'];
                $operator_name = operators($row['operator_id'])['name'];
                $offers[] = array(
 
                    'id' => $row['id'],
                    'name' => $offer_name,
                    'count' => $row['offer_count'],
                    'price' => $row['offer_price'],
                    'operator_name' => $operator_name
                );
            }
            if (!empty($offers))
            {
                return $offers;
            }
        }
        if(!empty($_GET['name']) and !empty($_GET['operator']))
        {
            $by_offers = offers(trim($_GET['name']));
            $by_operators = operators(trim($_GET['operator']));
            if (empty($by_offers) or empty($by_operators))
            {
                $offers = [];
                return $offers;
            }
            $offer_id = $by_offers['id'];
            $offer_name = $by_offers['name'];
            $operator_name = $by_operators['name'];
            $operator_id = $by_operators['id'];
            $request = requests($offer_id, $operator_id);
            if (empty($request))
            {
                $offers = [];
                return $offers;
            }
            foreach ($request as $row)
            {
                $offers[] = array(
                    'id' => $row['id'],
                    'name' => $offer_name,
                    'count' => $row['offer_count'],
                    'price' => $row['offer_price'],
                    'operator_name' => $operator_name
                );
            }
            if (!empty($offers))
            {
 
                return $offers;
            }
        }elseif (!empty($_GET['name']) and empty($_GET['operator']))
        {
            $by_offers = offers(trim($_GET['name']));
            if (empty($by_offers))
            {
                $offers = [];
                return $offers;
            }
            $offer_id = $by_offers['id'];
            $request = requests($offer_id, NULL);
            $offer_name = $by_offers['name'];
            if(empty($request))
            {
                $offers = [];
                return $offers;
            }
            foreach ($request as $row)
            {
                $operator_name = operators($row['operator_id'])['name'];
                if (empty($operator_name))
                {
                    $offers = [];
                    return $offers;
                }
                $offers[] = array(
                    'id' => $row['id'],
                    'name' => $offer_name,
                    'count' => $row['offer_count'],
                    'price' => $row['offer_price'],
                    'operator_name' => $operator_name
                );
            }
            if (!empty($offers))
            {
                return $offers;
            }
        }elseif (!empty($_GET['operator']) and empty($_GET['name']))
        {
            $by_operators = operators(trim($_GET['operator']));
            if (empty($by_operators))
            {
                $offers = [];
            }
            $operator_name = $by_operators['name'];
            $operator_id = $by_operators['id'];
            $request = requests(NULL, $operator_id);
            if (empty($request))
            {
                $offers = [];
                return $offers;
            }
            foreach ($request as $row)
            {
                $offer_name = offers($row['offer_id'])['name'];
                $offers[] = array(
                    'id' => $row['id'],
                    'name' => $offer_name,
                    'count' => $row['offer_count'],
                    'price' => $row['offer_price'],
                    'operator_name' => $operator_name
                );
            }
            if (!empty($offers))
            {
 
                return $offers;
            }
        }else{
            $request = requests(NULL, NULL);
            if (empty($request))
            {
                $offers = [];
                return $offers;
            }
            foreach ($request as $row)
            {
                $offer_name = offers($row['offer_id'])['name'];
                $operator_name = operators($row['operator_id'])['name'];
                $offers[] = array(
                    'id' => $row['id'],
                    'name' => $offer_name,
                    'count' => $row['offer_count'],
                    'price' => $row['offer_price'],
                    'operator_name' => $operator_name
                );
            }
            if (!empty($offers))
            {
                return $offers;
            }
        }
 
    }
    return $offers;
}
 
 
}
Вся проблема в том, что когда я обрабатываю 2-ю форму, то все выводиться, но при обработке первой я не получаю даже извещения об ошибке. Без подключения AJAX все работает. В первой форме получается ассоциативный массив, я могу понять почему его не выводит, но когда я пытался его преобразовать в обычный, выводя только одну запись из БД, результат я получал также нулевой. По логике, даже при передаче многомерного массива мне должно хотя бы вывести "array()". Кто знает в чем может быть проблема?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2019, 23:15
Ответы с готовыми решениями:

AJAX передача массива
Не передается массив в data аяксом. Я уверен, что не правильно определил data , но как правильно не...

Передача массива из php в js ajax
Доброго всем дня. Суть в чем. Передаю массив ошибок с помощью serialize() в файл js, однако русские...

Передача многомерного массива через Ajax
Добрый день. Имеется форма с чекбоксами, ссылка на скрин ниже https://ibb.co/dpQtWT Код...

Передача массива JSON + AJAX , видит массив как NULL
Задача не сложная, получить телефоны из формы, преобразовать в массив, и отправить как массив...

Передача значение полей через Ajax-метод с использованием ассоциативного массива на php сервер
Добрый день граждане, возможно ли так реализовать ? Предположим что есть 3 поля. Каким способом...

4
BlacKCheT
Лучше не лучше, но лучше.
10 / 9 / 2
Регистрация: 11.03.2018
Сообщений: 345
12.01.2019, 22:26 2
Можно пару скринов?
0
Pisusio
0 / 0 / 0
Регистрация: 11.01.2019
Сообщений: 3
12.01.2019, 22:35  [ТС] 3
Ну вот то что я могу заскринить, больше скринить нечего) Нашел пока одну ошибку, в обработчике выводил result, а создавал массив "results". Насколько я понял, основная проблемя принять аяксом многомерный массив и вывести его
0
Миниатюры
Передача и вывод массива AJAX  
j2FunOnly
Модератор
Эксперт JS
1011 / 918 / 524
Регистрация: 05.06.2015
Сообщений: 2,077
15.01.2019, 09:29 4
Цитата Сообщение от Pisusio Посмотреть сообщение
то все выводиться, но при обработке первой я не получаю даже извещения об ошибке.
Потому что вы перезаписываете функцию sendAjaxForm(), плюс там в параметрах есть всё нужное, вы вызываете вроде как правильно, но зачем-то при выводе результата запроса захардкодили целевую форму
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
$(document).ready(function() {
  $("#btn").click(
    function() {
      sendAjaxForm('result_form', 'ajax_form', 'action_ajax_form.php');
      return false;
    }
  );
 
  $("#btn1").click(
    function() {
      sendAjaxForm('form', 'a_form', 'action_ajax_form.php');
      return false;
    }
  );
});
 
function sendAjaxForm(result_form, ajax_form, url) {
  $.ajax({
    url: url,
    type: "GET",
    dataType: "html",
    data: $("#" + ajax_form).serialize(),
    success: function(dataArray) {
      result = $.parseJSON(dataArray);
      // $('#result_form').html('Название товара: ' + result.name + '<br>Цена: ' + result.price + '<br>Колличество товара: ' + result.count + 'Hi!');
      $('#' + result_form).html('Название товара: ' + result.name + '<br>Цена: ' + result.price + '<br>Колличество товара: ' + result.count + 'Hi!');
    },
    error: function(response) {
      // $('#result_form').html('Ошибка. Данные не отправлены.');
      $('#' + result_form).html('Ошибка. Данные не отправлены.');
    }
  });
}
1
Pisusio
0 / 0 / 0
Регистрация: 11.01.2019
Сообщений: 3
15.01.2019, 11:12  [ТС] 5
Спасибо!) Почти помогло, только я до сих пор не пойму, почему теперь когда пытаюсь вывести переменную result после строчки @var result = $.parseJSON(dataArray);@ ее присваивания в функции, то получаю на экран "null"
0
15.01.2019, 11:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2019, 11:12

Ajax вывод JSON массива
Пытаюсь вывести список регионов при нажатии на кнопку, выводит \u041c\u043e\u0441\u043a\u0432\u0430...

ajax + jquery вывод массива из бд
Нужно разобраться со следующим. Я хочу вывести картинки из бд в которых есть слово которое я...

Вывод полученного массива с сервера в таблице. Ajax
В общем. На странице есть два блочных тега &lt;div&gt;, которые делят страницу пополам. В первом 3...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru