我在函数中创建了一个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?!
}
答案 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)通过常规手段使您的服务器请求同步(不可取)