Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何修改jqueryajax调用的响应数据并将其作为更新后的jqXHR结果返回?_Javascript_Jquery - Fatal编程技术网

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
教育来将修改后的结果填充到第三个参数中。