【问题标题】:jQuery loop over JSON result from AJAX Succes hangs because firefox keeps executing javascript来自 AJAX Success 的 JSON 结果的 jQuery 循环挂起,因为 firefox 继续执行 javascript
【发布时间】:2013-04-10 08:01:54
【问题描述】:

关于这个问题: 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"}
];

我尝试使用 firebug 调试以下 ajax 语句,但在 "$.each(result, function(idx, user) {" 行之后它只是挂起,直到 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);
});

【问题讨论】:

  • 可能不是答案,但:data: "name=" + $("#site-search").val(), 可能是 data: {name : $("#site-search").val() }。我在您粘贴的代码中没有发现任何错误。
  • var result = [{"id":7, ... 你从你的请求中得到了什么?如果是这样:请求应该只返回[{"id":7, ... ] jquery 本身会将其放入结果中
  • 什么包装了 ajax 调用?
  • Firebug 显示请求只返回[{"id":7, ... ]。有趣的是我刚刚将每个语句周围的代码替换为 var i = 0; $.each(result, function(idx, user) {i++;}); alert(i); 并显示 114453。至少现在我明白为什么 Firefox 对 javascript 所花费的时间不满意......
  • 至于 Kevins 的问题:我不确定我是否理解您的问题,但 ajax 调用在此声明中:$('#site-search').bind('keyup', function(ev) {

标签: jquery ajax json list


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 2022-06-18
    • 1970-01-01
    相关资源
    最近更新 更多