(ノಠ益ಠ)ノ彡┻━┻
151 / 151 / 78
Регистрация: 05.06.2014
Сообщений: 710
Записей в блоге: 2
1

Заполнение и видимость значений массива в обработчике ajax и за его пределами

11.03.2015, 01:56. Показов 984. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.

Нужна помощь с этим скриптом:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var markers = new Array();
 
 
$.ajax({
            url: "/index.php?action=getmap",
            type: 'POST',
            data: {"AJAX" : true}, 
            cache: false,
            success: function(html){
                var addmrk = $.parseJSON(html);
                var i=0;
                while (i < addmrk.array_num) {
                markers.push({
                  latitude: addmrk.content[i].lat,
                  longitude: addmrk.content[i].lng,
                  marker_content: '<div class="marker ' + addmrk.content[i].color + '"><i class="fa fa-'+addmrk.content[i].icon+'"></i></div>',
                  content: '<div class="infobox ' + addmrk.content[i].color + ' "><a class="infobox-image" href=""><img src="'+addmrk.content[i].image+'" alt=""></a><div class="infobox-content"><div class="infobox-content-title"><a href="#">'+addmrk.content[i].title+'</a></div><div class="infobox-content-body">'+addmrk.content[i].descr+'</div></div><div class="infobox-contact"><div class="infobox-contact-title"><a href="#">'+addmrk.content[i].location+'</a></div><div class="infobox-contact-body"><i class="fa fa-phone"></i>'+addmrk.content[i].phone+'<br><i class="fa fa-envelope"></i>'+addmrk.content[i].email+'<br>Site: '+addmrk.content[i].site+'</div><a href="#" class="close"><i class="fa fa-close"></i></a></div></div>'
        });
        i++;
    }
                
            }
        });
Дело в том, что массив markers заполняющийся внутри функции срабатывающей по событию success, заполненным доступен только там. Вне функции он пуст.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.03.2015, 01:56
Ответы с готовыми решениями:

Видимость переменных за пределами цикла
Помогите, пожалуйста, разобраться с видимостью переменных. Допустим есть код , код который...

Видимость переменной за пределами метода Timer
Привет всем! public class Truck { public...

Отмена отправки формы в обработчике внутри AJAX
Всем привет! Не могу понять как сделать вроде бы элементарную весчь: Есть форма, есть кнопка...

Почему продолжается заполнение массива за его пределы, если я указал его размер
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;locale.h&gt; #include &lt;conio.h&gt; typedef int...

5
Эксперт PHP
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
11.03.2015, 02:06 2
1. Не правильна конструкция цикла
while (addmrk.length--)
или
for(var i= 0; i < addmrk.length; i++)
или each jQuery
2. А ведь можно и так
Javascript
1
2
3
$.post("/index.php?action=getmap", {AJAX : true}, function(result){
    console.log(result)
}, 'json');
0
3323 / 2843 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
11.03.2015, 03:41 3

Не по теме:

Цитата Сообщение от Poznakomlus Посмотреть сообщение
А ведь можно и так
Можно, но чем вас полная форма записи не устраивает? И зачем одни параметры прописывать в URL, а вторые в параметр data? Хотя это уже вопрос и к ТС.

Во-первых, по поводу кода:
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var markers = []; // в 21-ом веке живем ))
$.ajax({
    url: '/index.php',
    type: 'POST',
    dataType: 'json',
    data: {
        action: 'getmap',
        AJAX: true
    },
    cache: false,
    success: function (html) {
        // парсить ответ не нужно, т.к. мы указали тип ожидаемых данных
        // html - это уже готовый к использованию объект
    }
});
Цитата Сообщение от N3stY Посмотреть сообщение
массив markers ... Вне функции он пуст.
Это и понятно, запрос ведь выполняется асинхронно. Ответы по этому вопросу, вы . Для того, чтоб понять с какой лучше стороны подойти к решению вашей задачи, нужно хотя бы знать, зачем вам понадобилось использовать массив вне callback-функции success, как инициализируете ajax-запрос и куда хотите передавать полученный массив.
1
(ノಠ益ಠ)ノ彡┻━┻
151 / 151 / 78
Регистрация: 05.06.2014
Сообщений: 710
Записей в блоге: 2
11.03.2015, 15:27  [ТС] 4
Цитата Сообщение от Lazy_Den Посмотреть сообщение
И зачем одни параметры прописывать в URL, а вторые в параметр data
Параметр в УРЛ (GET) говорит о том, что вызывать нужно модуль карт, параметр в DATA (POST) отвечает за AJAX режим (т.е. ответ придет только JSON ответ модуля без основной страницы т.к. запрос посылается к index.php).

Цитата Сообщение от Lazy_Den Посмотреть сообщение
зачем вам понадобилось использовать массив вне callback-функции success
Это массив для установки маркеров на гуглокарту. Проблема в том, что шаблон писал не я(купил уже готовый) и весь JS этого шаблона очень запутанный. Получается, что инициализация карт идет в одном файле, а маркеры в другом, для этого и нужно его использовать вне функции.
Цитата Сообщение от Poznakomlus Посмотреть сообщение
1. Не правильна конструкция цикла
while (addmrk.length--)
или
for(var i= 0; i < addmrk.length; i++)
по началу использовал for, но while то же выполняет свою задачу.

Добавлено через 17 минут
Помогло
Javascript
1
async: false
0
3323 / 2843 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
11.03.2015, 15:39 5
Цитата Сообщение от N3stY Посмотреть сообщение
Параметр в УРЛ (GET) говорит о том, что вызывать нужно модуль карт, параметр в DATA (POST) отвечает за AJAX режим
Железно. А что мешает сделать без лишних извращений:

PHP
1
2
3
4
5
6
7
if( isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && ( $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' ) ) {
    // в этой секции обрабатываются все ajax-запросы
    if(isset($_POST['getmap'])) {
        // подключаем модуль с картами
        // пара "AJAX: true" - вообще не нужна
    }
}
Цитата Сообщение от N3stY Посмотреть сообщение
инициализация карт идет в одном файле, а маркеры в другом
Если файлы уже подключены на странице, то я не вижу проблем с инициализацией в success. Как вы вызываете функцию, которая отвечает за расстановку маркеров? Вы же именно при вызове этой функции, хотите передавать массив данных. Я правильно понимаю схему?

Добавлено через 36 секунд
Цитата Сообщение от N3stY Посмотреть сообщение
Помогло async: false
Выбрали худший из возможных вариантов.
0
(ノಠ益ಠ)ノ彡┻━┻
151 / 151 / 78
Регистрация: 05.06.2014
Сообщений: 710
Записей в блоге: 2
11.03.2015, 18:54  [ТС] 6
Цитата Сообщение от Lazy_Den Посмотреть сообщение
Выбрали худший из возможных вариантов.
Я бы не сказал, маркеры размещаются при загрузке страницы, поэтому подходит.
Цитата Сообщение от Lazy_Den Посмотреть сообщение
if( isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && ( $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' ) ) {
* * // в этой секции обрабатываются все ajax-запросы
* * if(isset($_POST['getmap'])) {
* * * * // подключаем модуль с картами
* * * * // пара "AJAX: true" - вообще не нужна
* * }
}
Лишние "если", да и мне нужен именно $_GET для определения модулей и $_POST для всего остального.
0
11.03.2015, 18:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.03.2015, 18:54
Помогаю со студенческими работами здесь

Ajax. Видимость XMLHttpRequest.
Вот имеется функция обработчик onclick кнопки на странице: function getData() { var...

Заполнение и обработка массива значений
Используя функцию F, построить массив у с элементами yk=F(k). Выполнить для этого массива...

Заполнение массива его модулями
Всем привет!Может кто объяснить,каким образом здесь заполняется массив его модулями-это вставка...

Заполнение массива его модулями
Ребят,помоги пожалуйста,не могу понять как заполнить массив его модулями,через сопроцессор?:((((...

Создание динамического массива и его заполнение
как можно создать динамический массив чтобы пользователь сам ввел размерность и заполнил его? вот...

Заполнение массива и суммирование его элементов
#include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;cstdlib&gt; using namespace std; int main() {...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru