За последние 24 часа нас посетили 17110 программистов и 2181 робот. Сейчас ищут 903 программиста ...

return jQuery

Тема в разделе "JavaScript и AJAX", создана пользователем gkhelloworld, 13 июл 2010.

  1. gkhelloworld

    gkhelloworld Активный пользователь

    С нами с:
    18 ноя 2007
    Сообщения:
    311
    Симпатии:
    0
    Адрес:
    PHP.ru
    есть функция, нужно сделать return

    [js]function post(path,postdata)
    {

    $.ajax({
    type:'POST',
    url:path,
    data:postdata,
    dataType:'json',
    success: function(data)
    {
    return data.answer;
    }
    });

    }[/js]

    Но так не работает... как правильно сделать, чтобы работал return?
    Т.е. внутри $.ajax() return не работает... - предложите альтернативу или выход из ситуации...
     
  2. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    у меня есть мега тупое решение =)в success вызывать другую функцию, которая нужна и передавать в нее data =)
    можно даже сделать нечно вроде фабрики в post передавать еше 1 переменную с названием вызываемой функции =)
     
  3. phpdude

    phpdude Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    очень приятно что вы не понимаете что такое Ajax, там какбы ключевое слово - Asyncronious, а не "заебись, форма не перегружается", ну да ладно.

    допустим вы все таки не хоитте понимать что это такое, тогда и сделаем через задний проход - пошлем блокируемый запрос и выведем результаты через замыкание

    async

    [js]function post(path,postdata)
    {
    var _data;
    $.ajax({
    type:'POST',
    async: false,
    url:path,
    data:postdata,
    dataType:'json',
    success: function(data)
    {
    _data = data.answer;
    }
    });

    return _data;
    }[/js]
     
  4. phpdude

    phpdude Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    теоретически должно работать, на практике должно, но подход - дерьмо :)
     
  5. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    phpdude
    я сразу про это подумал, оно асинхронно работает return происходит раньше чем ответ от аякса
     
  6. phpdude

    phpdude Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    Padaboo
    а я сразу это знал) знаю и буду знать)
     
  7. phpdude

    phpdude Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    тут надо оборачивать код в функции и объекты чтобы выглядело читабельно и расширябельно
     
  8. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    дану

    [js]function post(path,postdata,call)
    {
    call=call || 'defaultFunc' ;

    $.ajax({
    type:'POST',
    url:path,
    data:postdata,
    dataType:'json',
    success: function(data)
    {
    Caller(data.answer,call);
    }
    });

    }

    function Caller(data,call){

    return call(data);

    }

    function defaultFunc(data){
    alert(data);
    }
    [/js]
    не проверял, как то так
     
  9. phpdude

    phpdude Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    Padaboo
    ну во первых твой код не заработает, но это не важно.

    во вторых я не про этот говнокод говорил)
     
  10. gkhelloworld

    gkhelloworld Активный пользователь

    С нами с:
    18 ноя 2007
    Сообщения:
    311
    Симпатии:
    0
    Адрес:
    PHP.ru
    решение с async:false работает...
    да на самом деле я не до конца понимаю тонкости ajax
    можно в двух словах описать происходящие ?

    еще я нашел ответ на jquery.com

    [js]var html = $.ajax({
    url: "page.php",
    async: false
    }).responseText;[/js]