如何在Sencha Touch中获取服务器JSON响应?

时间:2011-11-06 06:47:10

标签: javascript extjs sencha-touch

我在函数中创建了一个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 个答案:

答案 0 :(得分:1)

如果您在jsonData函数中使用它,getData将无法获取任何信息的原因是 - 当成功回调返回时(请记住,请求是异步的) - {{1}范围已经退出。

您可以而且应该做的是定义处理函数:

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

可靠且仍然可以调用 AJAX 请求。如果您考虑一下 - 如果上述情况可能,它将基本上成为同步请求。

在包含服务器响应的... var result = getData('arg1', 'arg2', 'arg3'); ... 上进行计算的两种方法是:

1)在jsonData函数中执行此操作并相应地调整其余代码(作为一方不是 - 您可以将处理程序函数作为参数传递给handleSuccess中的Ext.Ajax

2)通过常规手段使您的服务器请求同步(不可取)