无法使用JQuery自动完成功能解析JSON

时间:2011-03-08 19:23:28

标签: jquery asp.net json

我正在尝试使用VB .Net4创建一个自动完成文本框。它有一个json后端,它只返回一个名字和姓氏,如下所示:

{"d":"[{\"firstN\":\"john\",\"lastN\":\"doe\"},{\"firstN\":\"another \",\"lastN\":\"dude\"},{\"firstN\":\"dsaf\",\"lastN\":\"asdfasdf\"}]"}

我的JQuery似乎是一个相当标准的代码:

$("#MainContent_autocomplete").autocomplete({
                source: function (request, response) {
                    $.ajax({
                        url: "/PatientLookup.asmx/LookupPatient",
                        dataType: "json",
                        type: "POST",
                        data: "{ 'key': '" + request.term + "' }",
                        contentType: "application/json; charset=utf-8",
                        processData: true,
                        success: function (data) {
                            response($.map(data.d, function (item) {
                                return {                                
                                    label: item.firstN,
                                    value: item.firstN
                                }
                            }));
                        }
                    });
                },
                minLength: 2
            });

问题出现在成功功能中。当它进入map函数时,它根本不会让我读取firstN和lastN数据。

2 个答案:

答案 0 :(得分:1)

根据引用的数组判断,看起来您正在返回一个字符串值,您使用JavaScriptSerializer或DataContractJsonSerializer手动JSON序列化,如:

public string LookupPatient(string key) {
  // Something that returns a string of JSON here.
}

是吗?

如果是这样,您应该让.NET为您处理序列化。像这样:

public class Name {
  public string firstN { get; set; }
  public string lastN { get; set; }
}

public List<Name> LookupPatient(string key) {
  List<Name> result = new List<Name>();

  result.Add(new Name() { firstN = "Dave", lastN = "Ward" });
  result.Add(new Name() { firstN = "John", lastN = "Doe" });

  // JSON serialization happens automatically here.
  return result;
}

如果您已经有了适当的视图模型或DTO类,显然您可以重用它,而不是专门为这个方法创建Name类。

答案 1 :(得分:0)

您的JSON无效:d的值不得引用,并且您要转义引号:

{
    "d": [
        {
            "firstN": "john"
            , "lastN": "doe"
        }
        , {
            "firstN": "another"
            , "lastN" : "dude"
        }
        , {
            "firstN": "dsaf",
            "lastN": "asdfasdf"
        }
    ]
}