Как получить ответ JSON на сервере в Sencha Touch? - PullRequest
0 голосов
/ 06 ноября 2011

Я создал запрос AJAX в функции. Тем не менее, я не уверен, как вернуть результат JSON - кто-нибудь может показать мне, как?

function getData(arg1, arg2, arg3){

    Ext.Ajax.request({
        url: 'getData.php',
        params: {
            arg1: arg1,
            arg2: arg2,
            arg3: arg3
        },
        method: 'POST',
        success: function(response, opts) {
            var jsonData = Ext.util.JSON.decode(response.responseText);
            console.log(jsonData);   <-- Can see the result here!
        },
        failure: function(response, opts) {
            console.log('server-side failure with status code ' + response.status);
        }
    });
    return /jsonData/    <-- Here is the value I want?!

}

1 Ответ

1 голос
/ 06 ноября 2011

Причина, по которой ваш 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) Сделайте ваш запрос к серверу синхронным (не рекомендуется) обычными средствами

...