Причина, по которой ваш jsonData
не получит никакой информации, если вы будете использовать ее в своих getData
функциях, заключается в том, что - когда возвращается успешный обратный вызов (помните, что запрос асинхронный) - область getData
уже закрыта.
Что вы можете и должны сделать, это определить функцию-обработчик:
function handleSuccess( response, opts )
{
var jsonData = Ext.util.JSON.decode(response.responseText);
// use jsonData here in whatever way you please
}
, а затем определить свой getData
следующим образом:
function getData(arg1, arg2, arg3){
Ext.Ajax.request({
url: 'getData.php',
params: {
arg1: arg1,
arg2: arg2,
arg3: arg3
},
method: 'POST',
success: handleSuccess,
failure: handleError
});
// Note the lack of return statement.
}
Конечно, вы можетепроделайте то же самое с обработкой ошибок:
function handleError( response, opts )
{
console.log('server-side failure with status code ' + response.status);
}
Обновление
вы не можете сделать что-то подобное (где result
получит серверответ):
...
var result = getData('arg1', 'arg2', 'arg3');
...
надежно и до сих пор вызывает запрос AJAX .Если вы подумаете об этом - если бы вышеперечисленное было возможно, то оно по существу превратилось бы в синхронный запрос.
Два способа выполнить ваши вычисления на jsonData
, который содержит ответ сервера:
1) Сделайте это в функции handleSuccess
и отрегулируйте остальную часть своего кода соответствующим образом (как сторона - вы можете передать функции обработчика в качестве параметров Ext.Ajax
в options.callback
и)
2) Сделайте ваш запрос к серверу синхронным (не рекомендуется) обычными средствами