将 json 添加到 tabledit 选择参数

Posted

技术标签:

【中文标题】将 json 添加到 tabledit 选择参数【英文标题】:add a json to a tabledit select parameter 【发布时间】:2021-07-09 23:12:17 【问题描述】:

我正在使用 jquery tabledit 插件,我需要使用来自 URL 的 JSON 来提供 tabledit 的选择。 我有来自远程 URL (getpsp.php) 的 JSON,如下所示:

["id":"2698","psp":"Paypal","id":"2699","psp":"Unknown","id":"2677","psp":"Stripe","id":"2678","psp":"AmazonPay"]

我的 JS 代码如下:

$('#pspmap').on('draw.dt', function() 
     $.ajax(
       url: 'ajax/getpsp.php',
       type: 'GET',
       dataType: 'html',
       success: function(data, status, xhr)
       
          var jsonstring = JSON.stringify(data);
         
       ,
       error: function(xhr, status, error)
       
           
           alert("error");
       
   );
    
      $('#pspmap').Tabledit(
          url: 'ajax/action.php',
          dataType: 'json',
          columns: 
              identifier: [0, 'id'],
              editable: [
                 [2, 'color', jsonstring]
                ],
          deleteButton: false,
          hideIdentifier: true,
          restoreButton: false,
          onSuccess: function(data, textStatus, jqXHR) 
              if (data.action == 'delete') 
                  $('#' + data.id).remove();
                  $('#pspmap').DataTable().ajax.reload();
              
          
      );
  );

我怀疑 JSON 的字符串化不正确,它应该如下所示: (根据 tabledit 网站上的示例)

editable: [ [3, 'avatar', '"1": "Black Widow", "2": "Captain America", "3": "Iron Man"']]

【问题讨论】:

【参考方案1】:

您可以像这样将响应数据转换为可编辑的列下拉选项字符串

const options = ["id":"2698","psp":"Paypal","id":"2699","psp":"Unknown","id":"2677","psp":"Stripe","id":"2678","psp":"AmazonPay"];

const result = options.reduce((acc, opt, index) => 
  acc[opt.id] = opt.psp;
  return acc;
, )

console.log(JSON.stringify(result))

然后你可以在你的代码中集成相同的可重用函数。

function getOptionsConfig(col, key, options) 
  const result = options.reduce((acc, opt, index) => 
      acc[opt.id] = opt.psp;
      return acc;
    , );
  return [col, key, JSON.stringify(result)];


$('#pspmap').on('draw.dt', function() 
     $.ajax(
       url: 'ajax/getpsp.php',
       type: 'GET',
       dataType: 'html',
       success: function(data, status, xhr) 
          $('#pspmap').Tabledit(
              url: 'ajax/action.php',
              dataType: 'json',
              columns: 
                  identifier: [0, 'id'],
                  editable: [ [2, 'color', jsonstring], getOptionsConfig(3, 'psp', data) ],
              deleteButton: false,
              hideIdentifier: true,
              restoreButton: false,
              onSuccess: function(data, textStatus, jqXHR) 
                  if (data.action == 'delete') 
                      $('#' + data.id).remove();
                      $('#pspmap').DataTable().ajax.reload();
                  
              
          );
       ,
       error: function(xhr, status, error) 
           alert("error");
       
   );
  );

【讨论】:

行editable: [ [2, 'color', jsonstring], getOptionsConfig(3, 'psp', data) ],应该像editable: [ [2, 'PSP', ' "2677":"Stripe","2678":"AmazonPay","2698":"Paypal","2699":"Unknown"']]... 我相信这不是您的代码给出的输出(它给了我一个错误) 这是一个示例用法。如果你想完全像这样使用editable: [getOptionsConfig(2, 'PSP', data) ].

以上是关于将 json 添加到 tabledit 选择参数的主要内容,如果未能解决你的问题,请参考以下文章

单击 jquery-tabledit 中的编辑按钮时如何启用下拉选择框?

行中的动态选择

jquery-tabledit 不发送标识符

jQuery-Tabledit 抛出 MethodNotAllowedHttpException

添加到购物车

Qt Designer UI (python) 到 JSON