Jquery 返回json mvc时如何忽略逗号

Jquery 返回json mvc时如何忽略逗号,jquery,asp.net-mvc,autocomplete,split,Jquery,Asp.net Mvc,Autocomplete,Split,我将JSON从控制器返回到视图,以便在MVC中填充jquery自动完成文本框。问题是,我的一些数据包含逗号,因此被自动完成帮助器拆分 这是我的密码 控制器: public ActionResult GetData() { var data = repository.GetData(); return Json(data); } 视图(脚本): 如您所见,我正在使用jquery.split帮助程序分割返回的Json。我是应该使用正则表达式

我将JSON从控制器返回到视图,以便在MVC中填充jquery自动完成文本框。问题是,我的一些数据包含逗号,因此被自动完成帮助器拆分

这是我的密码

控制器:

    public ActionResult GetData()
    {
        var data = repository.GetData();

        return Json(data);
    }
视图(脚本):


如您所见,我正在使用jquery.split帮助程序分割返回的Json。我是应该使用正则表达式还是应该使用完全不同的方法?

好吧,经过多次反复和多次编辑,这里是我的最终答案。:)

另外,我相信split函数是纯javascript而不是jquery。

我假设您使用的是内置函数。如果你是,你有几个不同的选择

  • 基于文档中提供的一个示例,您只需给它一个指定服务URL的字符串,而无需自己解析返回。因此,大致如下:

    $("#Data").autocomplete({
        source: "../MyController/GetData"
    });
    
    您的操作很可能需要响应get请求和post请求,并且您的数据可能需要采用
    [{label:“something”,value:“1”},…]的形式。
    这可以通过在发送数据之前使用查询对数据进行整形来实现

    var data = from d in repository.GetData()
               select new
               {
                   label = d.[whatever you want the label to be]
                   value = d.[whatever you want the value to be]
               };
    return Json(data);
    
  • 您可以将当前实现与上述示例的部分内容结合起来,以获得如下内容:

    $.post("../MyController/GetData",
        function(data) {
            $("#Data").autocomplete({
                source: JSON.parse(data),
                max: 500,
                matchContains: true
            });
        });
    
    这假设数据的形式为
    [{label:“something”,value:“1”},…]
    (有关如何使用Linq对其进行造型,请参见1)。JSON解析器将为您解决引号中的逗号问题

  • 您还可以在要检索数据时指定一个

    $("#Data").autocomplete({
        source: function(request, response) {
            $.ajax({
                url: "../MyController/GetData",
                dataType: "json",
                success: function(data) {
                    response( data );
                }
            })
        }
    });
    
    (关于如何使用Linq塑造数据,请参见上文)

  • 关于当前实现的几点意见

    • 你应该考虑使用,而不是硬编码的网址,以防你改变你的路线

    • 相反,您应该使用解析操作的返回值。它通常会稍微多一些,并且在支持的较新浏览器中会产生更好的性能


    如果evalData看起来像“bla-bla”,“bla-bla-bla”。。。您可以按“,”而不是“,”拆分,您将返回多少个带有GetData的项目?由于jquery不接受任何参数,它将发送所有数据,而jquery将负责过滤。非常感谢。我没有让“source:JSON.parse(data)”参数起作用。相反,我用它替换了eval.split(“,”),效果很好。@Darcy:要使JSON.parse正常工作,您需要在页面中包含JSON2.js文件。这就是parse方法的来源。此外,一旦调用eval,就不必再调用split,操作中的数据将以JSON数组的形式返回,因此将其作为参数传递给eval将返回一个数组(split应该是no-op或导致错误)。
    $.post("../MyController/GetData",
        function(data) {
            $("#Data").autocomplete({
                source: JSON.parse(data),
                max: 500,
                matchContains: true
            });
        });
    
    $("#Data").autocomplete({
        source: function(request, response) {
            $.ajax({
                url: "../MyController/GetData",
                dataType: "json",
                success: function(data) {
                    response( data );
                }
            })
        }
    });