Ajax JQuery Асинхронное возвращаемое значение - PullRequest
6 голосов
/ 29 декабря 2010

как мне сделать этот код для возврата значения без зависания браузера .
Конечно, вы можете переписать это новым методом.

function get_char_val(merk)
{  
    var returnValue = null;
    $.ajax({   
                type:       "POST",
                async:      false,   
                url:            "char_info2.php",   
                data:   { name: merk },   
                dataType: "html",  
                success:    function(data)
                                    {
                                        returnValue = data;
                                    } 
        }); 
    return returnValue;
}
var px= get_char_val('x');
var py= get_char_val('y');

РЕДАКТИРОВАТЬ: мне нужно иметь по крайней мере 20 переменных, которые могут быть получены из php-файла в другое время.

Ответы [ 3 ]

14 голосов
/ 29 декабря 2010

Это невозможно.
Javascript работает в потоке пользовательского интерфейса; если ваш код ожидает ответа сервера, браузер должен оставаться заблокированным.

Вместо этого вам нужно вернуть значение с помощью обратного вызова:

function get_char_val(merk, callback)
{  
    var returnValue = null;
    $.ajax({   
                type:       "POST",
                url:            "char_info2.php",   
                data:   { name: merk },   
                dataType: "html",  
                success:    function(data) {
                    callback(data);
                } 
        }); 
}

get_char_val('x', function(px) { ... });
get_char_val('y', function(py) { ... });

Обратите внимание, что два обратных вызова будут выполняться в непредсказуемом порядке.


Вам следует изменить свой дизайн, чтобы получить все двадцать значений в одном запросе AJAX.
Например, вы можете взять список значений через запятую и вернуть объект JSON, например { x: "...", y: "..." }.

1 голос
/ 29 декабря 2010

Вы не можете назначать переменные таким образом (асинхронно). Вы должны установить переменные в обработчике success.

variableArray = new Array(); 

get_char_val('x');
get_char_val('y');

function get_char_val(merk)
{  
    var returnValue = null;
    $.ajax({   
        type:       "POST",
        url:            "char_info2.php",   
        data:   { name: merk },   
        dataType: "html",  
        success:    function(data)
            {
                variableArray[merk] = data;
            } 
    }); 
}

Когда все извлечения завершены, вы можете получить доступ к переменным x и y, используя variableArray[x] и variableArray[y]

0 голосов
/ 29 декабря 2010

Возможно, это не то, что вы ожидаете, но вы можете установить async: true, если вы не хотите, чтобы пауза в браузере и что вы хотите сделать с px в случае успеха

...