Javascript 如何修改jqueryajax调用的响应数据并将其作为更新后的jqXHR结果返回?
我使用的是Javascript 如何修改jqueryajax调用的响应数据并将其作为更新后的jqXHR结果返回?,javascript,jquery,Javascript,Jquery,我使用的是jsGrid,它的loadData控制器希望在ajax调用中获得数据,如: controller: { loadData: function() { return $.getJSON(url).done(function(data) { console.log(data) }); }, //...definition for others insertItem, updateItem, deleteItem } 上面的方法很好用 在将数据传递
jsGrid
,它的loadData
控制器希望在ajax调用中获得数据,如:
controller: {
loadData: function() {
return $.getJSON(url).done(function(data) {
console.log(data)
});
},
//...definition for others insertItem, updateItem, deleteItem
}
上面的方法很好用
在将数据传递到
jsGrid
之前,我现在需要对数据进行按摩。我想我必须在done函数中完成它。如何返回修改后的数据?您不能从异步函数返回任何内容
要做你需要做的事,你需要改变你的逻辑;首先发出AJAX请求以获取数据,然后使用它在回调处理程序中初始化jsGrid。大概是这样的:
$.getJSON(url).done(function(data) {
var modifiedData = /* modify your data object/array here... */
$('#element').jsGrid({
data: modifiedData
});
});
使用带有jqXHR
参数的成功回调重载:
controller: {
loadData: function() {
return $.getJSON(url).done(function(data,status,jqXHR) {
console.log(data)
//modify data and update it into jqXHR.responseJSON
console.log(jqXHR.responseJSON)
});
},
//...definition for others insertItem, updateItem, deleteItem
}
我对jsGrid
的了解不足以偏离填充网格的标准方式。从工作版本的语法来看,似乎controller.loadData
需要函数定义,函数将返回ajax调用的结果,根据jQuery文档,该调用是jqXHR
对象。是否可以实例化一个新的jqXHR
对象,并用修改后的数据填充它,然后返回该对象而不是ajax调用?不,这是不可能的,因为在点击return
时未收到数据(这就是为什么异步代码必须使用回调才能知道数据何时可用)。然而,您可能正在使用过时的jqGrid版本,因为文档中似乎没有loadData
选项:对不起,这是jsGrid
,而不是jqGrid
。啊,我的错。在这两种情况下,该库也有一个数据属性,您可以像上面那样使用:。您不能使用loadData
,因为正如我提到的,请求是异步的,您不能返回属性期望接收的数据。谢谢。我明白你的意思。我刚刚发现表单函数(数据、状态、jqXHR)
的done(success)函数超载。现在我需要一些jqXHR
教育来将修改后的结果填充到第三个参数中。