3

jQuery オートコンプリートsource関数内にラップされた Ajax 呼び出しの下。Fiddler と Chrome のネットワーク コンソールで戻り値を確認すると、データが正しい形式でビューに返されていることがわかります。

ただし、ユーザーが入力を開始したときに発生する通常の項目のリストは表示されません。好きなだけ速く/遅く入力でき、何も表示されません。

プログラムの一部が正しく機能していることを確認するためだけに、コントローラー メソッド (これは ASP MVC サイトです) にブレークポイントを設定し、毎回起動します。

私はjQueryを初めて使用するのは数週間だけなので、どんな助けでも大歓迎です。ありがとう!

$(function () {
    $('#DRMCompanyId').autocomplete({
        source: function (request, response) {
            $.ajax({
                url: '@Url.Action("compSearch", "AgentTransmission")',
                type: 'GET',
                dataType: 'json',
                data: request,
                success: function (data) {
                        alert(data);
                        response($.map(function (value, key) {
                            alert(value);
                        return {
                            label: value,
                            value: key
                        };
                    }));
                }
            });
        },
        minLength: 1
    });
});

編集

alertsコードにいくつか追加しました。はalert(data)発火しますが、発火しalert(value)ません。

jsonこれは、Chrome のデバッグ コンソールから返されたのコピーです。

ここに画像の説明を入力

次に、キーと値のペアをオブジェクトの形式で返すコントローラー メソッドを示しますDictionary

            XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);
            nsmgr.AddNamespace("m", "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata");
            nsmgr.AddNamespace("d", "http://schemas.microsoft.com/ado/2007/08/dataservices");

            Dictionary<string, string> companies = new Dictionary<string, string>();

            foreach (XmlNode childNode in parentNode)
            {
                if (!String.IsNullOrWhiteSpace(childNode["content"].InnerText))
                {
                    try
                    {
                        string name = childNode["title"].InnerText;
                        string id = childNode["content"].InnerText.Substring(0, 6);

                        companies.Add(id, name);
                    }
                    catch (Exception ex)
                    {

                    }
                }
            }

            return Json(companies, JsonRequestBehavior.AllowGet);
        }
        catch (Exception ex)
        {
            results = ex.InnerException.ToString();
        }

        return Json(results, JsonRequestBehavior.AllowGet);
4

2 に答える 2

0

jQuery のドキュメント: http://api.jquery.com/jQuery.map/には、$.map関数が 2 つのパラメーターを想定していると書かれています。最初は配列です。$.each代わりにメソッドを使用する必要があると思います。

また、このコンテキストでresponseは、 のように、AJAX からのデータをパラメーターとして呼び出すことになっているコールバック関数であると考えていますresponse(data)

ここでヒップから撮影すると、成功ハンドラーは次のようになるはずです。

            success: function (data) {
                    var x, array = [];
                    for(x in data) {
                        array.push({
                            label: data[x].value,
                            value: data[x].key       
                        };
                    }
                    response(data);
             }
于 2013-04-25T20:11:02.843 に答える