Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   ajax и функция "возврата" (https://javascript.ru/forum/jquery/50500-ajax-i-funkciya-vozvrata.html)

Ljubin 29.09.2014 02:09

ajax и функция "возврата"
 
Всем здрасте.
Вот функция...
function num(){
  var name = 'Олег';
  var res = true;

   if(res == true){
     $ajax({
       url: "num.php",
       type: "POST",
       data: {'name': name},
       success: function(obj){            
                if(obj == true){
                   res = false;
                }  
             }
     });
   }
 alert(res);
}

Alert выводит - true!? А, надо бы - false.
Есть ли какая приблуда в Аяксе, чобы это сделать?
Или правильное решение.
Я думаю пока над этим.)
function num(){
  var name = 'Олег';
  var res = true;

   if(res == true){
     $ajax({
       url: "num.php",
       type: "POST",
       data: {'name': name},
       success: function(obj){            
                if(obj == true){
                 var res_valid = false;
                 change_valid(res_valid);
                }  
             }
     });
   }
var res_change_valid = change_valid();
 alert(res_change_valid);
}

function change_valid(obj){
  var res;
    if(obj == false){
       res = false; 
    }
    else{
       res = true
    }
  return res; 
}

Но это пока не работает.
alert выводит true!?

krasovsky 29.09.2014 08:21

Для начала - если уж ты используешь переменную Res как флаг, то возможно не стоит объявлять ее как локальную.
Во вторых ты сравниваешь строку с true, и всегда будешь получать false.
Если хочешь проверить на наличие ответа то
if(obj) {...}
//или
if(obj > '') {...}

Хотя это не лучший способ = лучше придумать что то вроде
if (obj.status == 'ok') {
res = false;
}
//естественно используя json

Ljubin 29.09.2014 15:56

Условие
if(obj == false)
// я поменял пока на 
if(obj)

json мне не подходит. Но это не суть...
Я уточню...
В этой строке должно быть так
url: "num.php/order",

Тоесть ajax обращается к контроллеру num.php и в нём к функции order
которая возвращает в ajax, true или false.
Задача в том чтобы перемення res = true
в функции возврата - ajax стала res = false
И уже со значением false использовалась дальше в функции num, в которой и размещён собственно ajax запрос.

p/s Моё решение - которое выше и над которым я думал - не годится.)

MallSerg 29.09.2014 16:22

Событие в JS вызываются асинхронно
т.е. на момент когда вызывается success: function (т.е. приходит ответ от сервера) alert уже произошел.

т.е. сначала вызывается alert(res);
и только после этого в будущем наступит событие и придет ответ от сервера

Ljubin 30.09.2014 00:39

Тоесть, выход только
async: false, //Синхронный запрос

krasovsky 01.10.2014 07:54

Во первых посмотри что вообще приходит от сервера. Может там шиш с маслом. Пользуйся консолью.
И все операции которые должны пройти непосредственно после запроса и используя данные запроса должны выполняться в коллбеке success.

Ljubin 03.10.2014 00:52

Цитата:

Сообщение от krasovsky (Сообщение 332914)
Во первых посмотри что вообще приходит от сервера. Может там шиш с маслом.

Нет, нет...С сервера всё приходит. Проблема(в данной ситуации) именно в асинхронной связи аякса с сервером, как описал её MallSerg - выше.
А, так как использовать ajax для синхронных запросов "подвешивая" браузер клиента "не кошерно", то пока повышаю уровень своих знаний, в надежде со временем решить эту задачу.))

Safort 03.10.2014 01:27

Ljubin,
Цитата:

Тоесть, выход только
async: false, //Синхронный запрос
Не обязательно. Вызываешь алерт прямо в коллбэке, после if.

krasovsky 03.10.2014 08:40

Цитата:

Сообщение от Ljubin
в надежде со временем решить эту задачу

Ты отдаешь себе отчет в том что ты уже написал ОТДЕЛЬНУЮ функцию чтобы переключить false в true и еще дальше ищешь какую то приблуду?
Повышать знания надо, как раз для того чтоб не писать подобной хрени

Ljubin 04.10.2014 00:47

Цитата:

Сообщение от krasovsky (Сообщение 333205)
Ты отдаешь себе отчет в том что ты уже написал ОТДЕЛЬНУЮ функцию чтобы переключить false в true и еще дальше ищешь какую то приблуду?
Повышать знания надо, как раз для того чтоб не писать подобной хрени

Господин професор, или ты читаеш коменты, вникая в тему и потом делаем свой высер, или же сразу идёш на хуй!


Часовой пояс GMT +3, время: 21:05.