[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Передача данных внутри функции
papa_serg
Здравствуйте, такой код:
function ab(){
[...]
var parms_2 = "";
if (ag1 == 999 || ag1 == 998){

$.post('profile.php',{a:"get.city.filters",ag1:ag1,ag2:ag2,ag3:ag3}, function(data) {
parms_2 = data; //к примеру равняется 111
});
}
alert (parms_2);
}

т.е. изначально, объявляется переменная parms_2, с пустым значением, далее через ajax запрос по средствам jquery, переменной parms_2, присваивается значение переменной data, однако они не присваиваются переменной вне ф-ции post.
и на выходе alert (parms_2), выдаёт пустое значение(вместо "111").
Подскажите как подправить?
Спасибо.



Спустя 34 минуты, 18 секунд (28.11.2011 - 14:51) TranceIT написал(а):
Покажите profile.php

Спустя 2 минуты, 11 секунд (28.11.2011 - 14:53) Renden написал(а):
papa_serg
уберите var в строке var parms_2 = ""; просто parms_2 = "";

Спустя 2 минуты, 59 секунд (28.11.2011 - 14:56) papa_serg написал(а):
TranceIT, м а чем он поможет?
Там несколько сотен case'ов, "get.city.filters" - 100% возвращает НЕ пустой результат.
В плане если поднять выше, и вставить его в
$.post('profile.php',{a:"get.city.filters",ag1:ag1,ag2:ag2,ag3:ag3}, function(data) {
parms_2 = data; //к примеру равняется 111
alert(parms_2);
});

Результат будет правильный. А вот за пределы "$.post", данные не выходят.

Renden, не помогло.

Спустя 2 минуты, 46 секунд (28.11.2011 - 14:59) Renden написал(а):
papa_serg
Т.е в выше приведенном коде алерт выдает то что надо? Честно говоря не вижу проблем, переменная parms_2 видна должна быть везде..

ЗЫ еще могу предположить что в случае выноса алерт срабатывает раньше чем отрабатывает $.post поэтому результат пустой, хотя не уверен..

Спустя 33 секунды (28.11.2011 - 15:00) TranceIT написал(а):
Смысл в том, что если при работе profile.php возникает ошибка, то возвращается пустота. Как вариант поставить в нем error_reporting(E_ALL), тогда вернется ошибка.

Спустя 3 минуты, 12 секунд (28.11.2011 - 15:03) papa_serg написал(а):
TranceIT, нет, ошибки нету.
Запрос ajax возвращает именно правильный результат.

Я же говорю:

parms_2 = "222";
$.post('profile.php',{a:"get.city.filters",ag1:ag1,ag2:ag2,ag3:ag3}, function(data) {
parms_2 = data; //к примеру равняется 111
alert(parms_2);
});

alert возвращает - "111".


parms_2 = "222";
$.post('profile.php',{a:"get.city.filters",ag1:ag1,ag2:ag2,ag3:ag3}, function(data) {
parms_2 = data; //к примеру равняется 111
});
alert(parms_2);

alert возвращает - "222".

Спустя 2 минуты, 1 секунда (28.11.2011 - 15:05) papa_serg написал(а):
Renden, точно =) алерт срабатывает раньше пост.
Есть вариант, как его задержать?
т.е. что бы в нём появились данные именно из пост-запроса?

Спустя 6 минут, 23 секунды (28.11.2011 - 15:11) TranceIT написал(а):
У меня есть подобный скрипт, алерт так же не срабатывает, если он за пределеми ф-ции post. Судя по всему ограничение jQuery
Сделайте обработку внутри...

Спустя 1 минута, 33 секунды (28.11.2011 - 15:13) Renden написал(а):
papa_serg
Да либо обработка внутри, либо просто пиши в массив)

Спустя 2 минуты, 30 секунд (28.11.2011 - 15:15) papa_serg написал(а):
Спасибо. Засунул внутрь - костыль, но хоть что-то wink.gif

Спустя 5 минут, 25 секунд (28.11.2011 - 15:21) TranceIT написал(а):
Это ограничение функций post и get. Если юзать ajax, то вернуть значение можно. Вот тут ответ
http://www.askdev.ru/jquery/3787/return-post/

UPD
Или юзаем
$.ajaxSetup({async:false});

А затем вызываем post.

Инфа с api.jquery.com

Спустя 2 минуты, 7 секунд (28.11.2011 - 15:23) inpost написал(а):
Просто, мне кажется, ещё результат аякса ещё не пришел, поэтому не успело изменить параметр твоей переменной глобальной.

Спустя 2 минуты, 13 секунд (28.11.2011 - 15:25) inpost написал(а):
Я имел ввиду, что скрипт выполняется, и Аякс тоже паралельно выполняется. То, что внутри функции - это будет выполнено, когда результат вернётся с сервера, а alert() просто по порядку.
Порядок такой:
Выполнить отправку.
Выполнить алерт.
Когда результат вернётся, выполнить внутреннюю функцию.
Если я прав, то для эксперимента можешь перед alert поставить паузу, или вывести алерт по клику, сначала отправь Аяксом запрос, подожди его выполнение, а потом проверь, обновилась ли глобальная переменная.

Спустя 4 минуты, 1 секунда (28.11.2011 - 15:29) Renden написал(а):
inpost
Мы это уже выяснили 5 постами ранее wink.gif

Спустя 2 минуты, 24 секунды (28.11.2011 - 15:31) inpost написал(а):
Renden
Я увидел такого содержания темы: "в jQuery", а не по своей сущности родоначальник - Ajax, вне зависимости от библиотеки, которую используем. smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.