AJAX синхронность

Discussion in 'PHP' started by Apeckou, 6 Aug 2012.

  1. Apeckou

    Apeckou Elder - Старейшина

    Joined:
    23 Jan 2007
    Messages:
    143
    Likes Received:
    11
    Reputations:
    0
    Здравствуйте, я тут аякс начал осваивать, есть функция типа

    PHP:
    function getStreetBox(selid,value)                                {
    var 
    link="/json_getinfo.php?callback=?&mode=getstreetslike";
    $.
    getJSON(link,
    function(
    data)                {
    alert(data);
                            }
    );
                                                            }
    возможно ли сделать так чтобы при вызове функции getStreetBox именно _она_ отдавала значение data и то только когда его получит?
    Пробовал в function(data) писать "return data" и в главной функции после нее писать "return data" но получалась какая-то херня.
    Подскажите плз, очень надо...

    или подскажите способ как сделать функцию которая аяксом будет дергать что нужно и ВОЗВРАЩАТЬ это значение (которое дернула) ? Т.е. чтобы можно было аяксом дернуть скрипт some.php и сделать вот так alert(getSomeInfo('some.php?id=666'));
     
    #1 Apeckou, 6 Aug 2012
    Last edited: 6 Aug 2012
  2. ахъ

    ахъ New Member

    Joined:
    4 May 2011
    Messages:
    2
    Likes Received:
    3
    Reputations:
    1
    Очень топорный вариант

    Code:
    
    function get(uri, result)
    {
        $.ajax({
            url: uri,
            dataType: 'json',
            async: false,
            data: '',
            success: function(data) {
                result.data = data;
            },
            error: function (msg) {
                console.log("Ошибка: " + msg.status + ": " + msg.statusText);
            }
        });
    }
    
    function getSomeInfo(uri)
    {
        var r = new Object();
        get(uri, r);
            
        while(r.data.len == 0);
        
        console.log("Принятые данные: " + r.data);
        return r.data;
    }
    
    alert(getSomeInfo('/path/to/api'));
    
    
    А вообще лучше использовать колбэки. Не зря же их придумали. После получения ответа сервера стартуется код, который этот ответ обрабатывает, после чего передает управление дальше. Не нужно пытаться впихнуть всю логику в один поток.
     
    1 person likes this.
  3. Dmit3Y

    Dmit3Y Member

    Joined:
    19 Jul 2010
    Messages:
    45
    Likes Received:
    8
    Reputations:
    0
    1 вариант.
    Code:
    var response = '';
    $.ajax({ type: "GET",   
             url: "http://example.org/",   
             async: false,
             success : function(text)
             {
                 response = text;
             }
    });
    
    alert(response);
    2 вариант.
    Code:
    var response = $.ajax({ type: "GET",   
                            url: "http://example.org/",   
                            async: false
                          }).responseText;
    alert(response);
    2 вариант более правильный.
     
    1 person likes this.
Loading...