javascript - 正确迭代 JSON 返回

标签 javascript asp.net json asp.net-mvc-3

我的脚本有一个奇怪的问题。我正在获取一个 JSON 结果集并希望对其进行迭代然后显示在一个 div 中。我检查了 fiddler,我可以看到整个集合都像下面的集合一样返回

[{"EPubID":71,"SerialID":1,"PartnerID":343,"Partner":"Aberdeen, City of ","PublicationTitle":"Uploading multiple files test","AuthFirstName":null,"AuthMiddleName":null,"AuthLastName":null,"AuthFullName":null,"PublicationYear":2011,"SubmitterEmail":null,"VolumeNumber":null,"Issue":null,"AlreadyInCatalog":false,"InCatalog":"No","Status":"D","Notes":"testing multiple file uploads","IsMonograph":false,"Monographed":"No","SubmittedDate":"\/Date(1317913458810)\/","SubmittedBy":"admin","ApprovedDate":"\/Date(1317914842263)\/","ApprovedBy":"admin","SubmittingPartnerID":0,"OriginalRefId":"343-71","SerialName":"None","URL":null,"InfoRecordID":0,"LastModified":"\/Date(-62135568000000)\/","IsSerial":false,"Approved":false,"Delete":false,"Pending":false,"files":null},{"EPubID":72,"SerialID":19,"PartnerID":26,"Partner":"Digital Archives","PublicationTitle":"testing multiple file uploads ","AuthFirstName":null,"AuthMiddleName":null,"AuthLastName":null,"AuthFullName":null,"PublicationYear":2001,"SubmitterEmail":null,"VolumeNumber":"1","Issue":"1","AlreadyInCatalog":false,"InCatalog":"No","Status":"A","Notes":"this should work","IsMonograph":false,"Monographed":"No","SubmittedDate":"\/Date(1317915134767)\/","SubmittedBy":"admin","ApprovedDate":"\/Date(1317915430627)\/","ApprovedBy":"admin","SubmittingPartnerID":0,"OriginalRefId":"26-72","SerialName":"Fake Test Serial","URL":null,"InfoRecordID":0,"LastModified":"\/Date(-62135568000000)\/","IsSerial":false,"Approved":false,"Delete":false,"Pending":false,"files":null}] 

问题是我的脚本只显示返回的第一项,没有其他内容。这是我的脚本。

function SearchExistingEpubs() {
    var title = $("input#PublicationTitle").val();

    $('#Results').hide();
    $("div#SearchResults").innerHTML = '';
    $.getJSON('/EPub/SearchExistingEpubs/' + title, null, function (data) {
        var items = [];
        var found = false;
        $.each(data, function (key, val) {
            found = true;
            $("div#SearchResults").empty();
            $("div#SearchResults").append("Title: " + val.PublicationTitle + " Owning Partner: " + val.Partner + " Year: " + val.PublicationYear) ;
            $('#Results').show();
        });
        if (!found) {
            $("div#SearchResults").empty();
            //$("div#SearchResults").html('');
            $("div#SearchResults").append("No documents found");
            $('#Results').show();
            //$('#Results').slideUp(10000);
            $('#Results').animate({height:'toggle'},10000);
            //$('#Results').fadeOut(10000);
        }
        //$('#Results').show();
    });        
};

最佳答案

通过调用 empty(),您将在循环的每次迭代中清除 div 的内容:

$.each(data, function (key, val) {
    found = true;
    $("div#SearchResults").empty();  // <------ REMOVE this line
    $("div#SearchResults").append("Title: " + val.PublicationTitle + " Owning Partner: " + val.Partner + " Year: " + val.PublicationYear) ;
    $('#Results').show();
});

但是在循环中进行 dom 更新通常不是一个好主意。为什么不构建您的字符串并执行一个 dom 更新:

var content = '';
$.each(data, function (key, val) {
    found = true;
    content += "Title: " + val.PublicationTitle + " Owning Partner: " + val.Partner + " Year: " + val.PublicationYear;
});
$("div#SearchResults").append(content);
$('#Results').show();

关于javascript - 正确迭代 JSON 返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8761533/

相关文章:

javascript - 在React中,方法返回无法读取未定义的属性 'target'

javascript - 如何删除查询字符串的某些元素?

javascript - 有没有办法只提取数组的属性?

asp.net - 允许远程访问 IIS 7.5

javascript - PHP的json_encode在JS解析时有时会丢失最后一个 '}'括号

java - Resttemplate - 请求pojo本身或请求json字符串并解析它

javascript - $.on() 在 stopPropagation() 之后冒泡;

c# - 使用 LINQ 查找 MAX/MIN 列表项?

c# - 在 .NET core 下的 Linux 上运行 .NET 4.5

json - 如何使用来自 API 调用的动态变量解码嵌套的 JSON 结构