1

この質問に関連して: JSONのjQueryループはAJAXの成功から生じますか?

私は次のものを持っています.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 ページに配置すると、本来の機能が正確に実行され、関数のタイトルが 2 回表示されます。アラートをポップアップする代わりに div をページに追加すると、同じコードが 2 回以上実行されるのはなぜですか? 次に、user.functionTitle が突然 undefined を返すのはなぜですか?

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

1 に答える 1

0

解決策は非常に簡単でした: dataType を text から json に変更するだけで、すべてが正常に機能します。そうしないと、各ループが入ってくるすべての文字を単独で処理します。

于 2013-04-17T14:43:47.737 に答える