来自AJAX的JSON循环的jQuery循环成功挂起,因为firefox继续执行javascript

时间:2013-04-17 13:56:13

标签: jquery ajax json list

关于这个问题: jQuery loop over JSON result from AJAX Success?

我已经得到以下内容,这使得Firefox在返回过多的项目(新div)之前用尽了太多cpu,其中只有一些“未定义”文本,尽管我可以看到(在我使用的小提琴页面)我想要检索项目的方式(例如user.functionTitle)是正确的。这里出了什么问题?

var result = [{"id":7,
"loginID":"jdoe",
"userStatus":"ACTIVE",
"firstName":"John",
"middleName":"",
"prefix":"",
"lastName":"Doe",
"functionTitle":"Junior developer"},
{"id":8,
"loginID":"jadoe",
"userStatus":"ACTIVE",
"firstName":"Jane",
"middleName":"",
"prefix":"",
"lastName":"Doe",
"functionTitle":"Junior developer"}
];

以下的ajax声明我尝试使用firebug进行调试,但是在使用“$ .each(结果,函数(idx,用户){”之后,它只是挂起直到Firefox,告诉我一些javascript花费了太多时间...

    $.ajax({
        type : 'POST',
        url : "../hrm/search",
        contentType : 'application/x-www-form-urlencoded',
        cache: false,
        data: "name=" + $("#site-search").val(),
        dataType : 'text',
        success : function(result) {
            if (result != null) {
                $.each(result, function(idx, user) {
                        $('#found-users').append("<div class='option'>" +
                            "<div class='pass-wrapper'>" +
                        "</div>" +
                            "<div class='sr-content'>" + user.firstName + " " + user.prefix + " " + user.lastName + "</div>" +
                            "<div class='sr-content'>" + user.functionTitle + "</div>" +
                        + "</div>");
                });
                $("#found-users").show;
            } else {
                 $('#found-users').hide;
                 $('#found-users div').empty();
            }

        }
    });

jsp页面中的代码看起来像这样:

                            <div><input type="text" placeholder="search" id="site-search"></div>
                            <div id="found-users" class="search-results options">
                            </div>

首先:如果我在jsfiddle页面中将数据与以下语句放在一起,它就会完成它应该做的事情,它会弹出两次函数标题。 当我将div添加到页面而不是弹出警报时,相同的代码如何执行两次以上?第二个为什么user.functionTitle突然返回undefined?

$.each(result, function(idx, user) {
        alert(user.functionTitle);
});

1 个答案:

答案 0 :(得分:0)

解决方案非常简单:只需将dataType从text更改为json,一切正常,否则每个循环将处理自己进来的每个字符