【问题标题】:Jquery datatable pass string array as parameterJquery datatable 传递字符串数组作为参数
【发布时间】:2019-01-07 09:29:41
【问题描述】:

我想将字符串数组作为参数发送到服务器端。但这不起作用。但是我可以毫无问题地将字符串作为参数发送到服务器端。这些数据发送到 mvc 控制器。我正在使用 jquery 数据表 1.10.16。

 $(document).ready(function() {
    $('#example').DataTable( {
        "processing": true,
        "serverSide": true,
        "ajax": {
            "url": "test/getall",
            "data": function ( d ) {
                d.Ids = ["123", "333", "444"]; 
            }
        }
    } );
} );

【问题讨论】:

  • 我不知道 jquery 数据表,但也许你可以使用 array.join() 将其转换为字符串?
  • 使用'contentType': "application/json"return JSON.stringify(d.Ids)将数组序列化为JSON格式。确保控制器操作方法有字符串数组作为参数。
  • @Ray:是的,这是可能的。作为一个字符串,我可以提交到服务器端,然后在服务器端进行分解。但我想知道作为字符串数组传递到服务器端的方式。
  • @TetsuyaYamamoto,或者只使用traditional: true(因为它是一组简单值)
  • 控制器方法的签名是什么?

标签: jquery asp.net asp.net-mvc datatable


【解决方案1】:

正如@TetsuyaYamamoto 建议的那样,可以通过在请求中添加 "contentType": "application/json" 并使用 return JSON.stringify(d) 以 json 格式返回数据来实现

$(document).ready(function() {
        $('#example').DataTable( {
            "processing": true,
            "serverSide": true,
            "ajax": {
                "url": "test/getall",
                "contentType": "application/json",
                "data": function ( d ) {
                    d.Ids = ["123", "333", "444"]; 

                    return JSON.stringify(d);
                }
            }
        } );
    } );

【讨论】:

  • "contentType": "application/json"return JSON.stringify(d); 都是完全没有必要的。 JSON 是预期的,其他任何事情都会失败,data() 不期望返回值,意思是你处理 d 文字并将其字符串化是没有意义的。
  • @davidkonrad :是的,没有这两个,只要您不将数组传递到服务器端,它就可以工作。当您尝试将数组作为参数传递时,就会出现问题。
  • 好吧,我猜这是服务器端的问题?后端脚本没有写入或准备接受数组?我刚刚在没有contentType 和字符串化的PHP(没有ASP)中尝试了这个例子,$_GET['Ids'] 回显了字符串["123", "333", "444"],所以你的后端脚本只需要将它解析成一个数组?顺便说一句,您是否认为cache 对它的突然工作方式产生了一些影响?无论如何,太好了,你让它工作了:)
  • @davidkonrad,asp.net-mvc 不是 php。 OP 在 ajax 选项中确实需要 contentType": "application/json"JSON.stringify(d);traditional: true, 才能工作
  • @StephenMuecke,是的,PHP 不是 ASP,而且 ...??我们是这里的客户端。 DataTables 已经在后台对数据参数进行了字符串化,并且如前所述,它甚至不会注意到返回值,数据回调只是 jQuery AJAX 的 DataTables 功能改进,让您可以“即时”处理数据文字,见datatables.net/examples/server_side/custom_vars.html
【解决方案2】:
string strCommaSepList =  "123,333,444";
//convert to string array

string[] strCommanSepArray = strCommaSepList.Split(",");

您可以选择将数据发送到服务器的另一种方式。 如果您通过逗号分隔的字符串发送数据,例如“123,333,444” 然后在服务器端你可以通过内置的explode函数把它变成一个数组

【讨论】:

    【解决方案3】:

    你可以使用整数数组,也许这段代码会对你有所帮助

          "ajax": {
                    "url": "testUrl",
                    "data": function(d) {
                        d.ids=integerArray.join(',');
                     },
                  }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-14
      • 2012-07-17
      • 2020-05-01
      • 2023-04-02
      • 2012-11-15
      • 1970-01-01
      • 2017-08-10
      • 1970-01-01
      相关资源
      最近更新 更多