如何在ajax返回时解析字符串的JSON列表?

Posted

技术标签:

【中文标题】如何在ajax返回时解析字符串的JSON列表?【英文标题】:How to parse JSON list of string on ajax return? 【发布时间】:2016-03-19 22:11:56 【问题描述】:

我有一个简单的 ajax 调用,它返回一个序列化的字符串列表。这很棒,我可以取回数据。但是,我只是想对列表中的每个项目执行警报。但是,我只是不断地从列表中取回单个字符。例如,如果它返回一个列表,其中包含一个名为“Hello”的项目。它会提醒“H”、“E”、“L”等。有人可以帮我更改它以提醒完整的字符串吗?

收到的回复与上面的文字非常相似。如果 c# 变量 userList 返回一个字符串列表,其中只有“Andrew”。 JQuery 会提醒“A”、“N”、“D”等。如果不清楚,请告诉我。

谢谢

C#

[HttpPost]
        public string GetUserList(string Role) 
            List<string> UserList = new List<string>();
            UserList = Roles.GetUsersInRole(Role).ToList();
            return JsonConvert.SerializeObject(UserList);
        

jQuery

   $('#allRolesDD').change(function () 
        $.ajax(
            method: "POST",
            url: "./GetUserList",
            data:  Role: $(this).val() 
        )
        .done(function (data) 
            $('.roleDD').empty();
            for (i = 0; i < data.length; i++) 
                alert(data[i]);
            
            console.log("Passed 4");
        )
        .fail(function () 
            console.log("Failed 4");
        )
    );

【问题讨论】:

登录 data.d 看看会发生什么 dataType:'json' 在 ajax 中添加这个。如果您也可以在问题中发布回复可能会更好。 @Jai 这样做并没有改变任何东西。好的,我会发布回复 “数据”变量返回了什么? @UnmeshD 整个字符串 ["ANDREW"] 【参考方案1】:

为什么不返回列表而不是字符串,Web API 会自动将其转换为 json,您可以在请求中将其作为数组读取? 你只需要添加

$('#allRolesDD').change(function () 
    $.ajax(
        method: "POST",
        url: "./GetUserList",
        data:  Role: $(this).val() ,
        headers: 
            'Content-Type': 'application/json'
        
    )
    .done(function (data) 
        $('.roleDD').empty();
        for (i = 0; i < data.length; i++) 
            alert(data[i]);
        
        console.log("Passed 4");
    )
    .fail(function () 
        console.log("Failed 4");
    )
);

【讨论】:

你有什么链接可以告诉我如何实现这个吗? @AndrewKilburn 我更新了答案,我认为这应该可以完成工作。 然后我得到一个内部服务器错误,指出它找不到 GetUserList 方法。和以前一样奇怪。这是否意味着我必须将返回类型更改为 json 而不是字符串? @AndrewKilburn 不,您必须将返回类型更改为 List&lt;string&gt;【参考方案2】:

每个都试试jquery:

 $.ajax(
            method: "POST",
            url: "./GetUserList",
            data:  Role: $(this).val() ,
            success:function (data) 
               $.each(data,function(i,v)
                       console.log(v);
               );
            
        );

【讨论】:

我收到错误:无法使用“in”运算符在 [“ANDREW”] 中搜索“长度”。我以前试过这个,但没有用:( 但是怎么做呢?我正在正确序列化数据。不知道为什么会这样【参考方案3】:

您可以更改 c# 代码和 jquery,如下所示:

C#

[HttpPost]
    public JsonResult GetUserList(string Role) 
        List<string> UserList = new List<string>();
        UserList = Roles.GetUsersInRole(Role).ToList();
        return Json(UserList, JsonRequestBehavior.AllowGet);
    

jQuery

  $('#allRolesDD').change(function () 
$.ajax(
    method: "POST",
    url: "./GetUserList",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    data:  Role: $(this).val() 
)
.done(function (data) 
    $('.roleDD').empty();
    for (i = 0; i < data.length; i++) 
        alert(data[i]);
    
    console.log("Passed 4");
)
.fail(function () 
    console.log("Failed 4");
)
);

【讨论】:

感谢您的坚持。你在这里帮了很多忙。我能问一下返回 Json 序列化字符串与返回 JsonResult 有什么不同吗? 您的返回类型是字符串。因此 Json 序列化返回将转换为字符串并返回给您。所以你得到的只是一个字符串而不是列表。【参考方案4】:

您需要将dataType: "json" 添加到ajax 调用中,因为它不知道您的响应是json。它假定它是一个字符串。

$("#allRolesDD").change(function () 
    $.ajax(
        method: "POST",
        url: "./GetUserList",
        data:  Role: $(this).val() ,
        dataType: "json"                   
    )
    .done(function (data) 
        $('.roleDD').empty();

        $.each(data, function (i, v) 
            alert(v);
        );

        // or you could also iterate using for 
        //for (i = 0; i < data.length; i++) 
        //    alert(data[i]);
        //

        console.log("Passed");
    )
    .fail(function () 
        console.log("Failed");
    )
);

【讨论】:

以上是关于如何在ajax返回时解析字符串的JSON列表?的主要内容,如果未能解决你的问题,请参考以下文章

jquery ajax调用返回JSON解析错误

AJAX如何解析后台传来的json数据?

js面试题,ajax请求时,如何解释json数据

后台返回的中文数据是乱码,如何解析成正常字符

后台返回的中文数据是乱码,如何解析成正常字符

JSON字符串转换JSON对象,在JS页面转换成功,但是ajax提交json数据,后台解析抛出异常