3

さて、JQuery のオートコンプリート ウィジェットに頭がおかしくなりました。
ウィジェットをロードするさまざまな方法を試しました。私は現在、次のものを取得しています:

エラー: jQuery15105511000803127266_1353087819681 が呼び出されませんでした - parsererror

値が文字列なのか実際のオブジェクトなSystem.string[]のかはわかりませんが、 (firebug からの) Response 値は次のように見えます。 私はただ愚かなだけですか、それとも何かが足りないのですか (最後の質問に親切に答えてください...)?System.string[]system.string[]

私のJavaScriptは:

$("#clientName").autocomplete({
    source: function (request, response) {
        $.ajax({
            url: "/supplier/apSupplierSearch/",
            data: { searchAPName: clientName.value },
            dataType: "json",
            type: "POST",
            success: function (data) {
                //response(data);
                response($.map(data, function (item) {
                    return {
                        label: item.Name,
                        value: item.Name
                    }
                }))
            }
        }); // ajax
    }, // function [{
    scroll: true,
    scrollHeight: 600,
    minLength: 4
});

私の Web メソッドは次のとおりです。

[WebMethod]
public string[] apSupplierSearch(string searchAPName)
{
    IList<int> selectedPropertyIDs = new List<int>();
    string currentRole = UserServices.GetCurrentRole();
    Property currentProperty = UserServices.GetCurrentPropety();
    List<ApSupplier> suppliers = ApSupplierQueries.GetApSuppliers(searchAPName, selectedPropertyIDs, currentRole, currentProperty);
    List<string> supplierList = new List<string>();
    foreach (ApSupplier supplier in suppliers)
    {
        supplierList.Add(supplier.Name);
    }
    return supplierList.ToArray();
}
4

3 に答える 3

2

私は C# にはあまり詳しくありませんが、サプライヤ リストを返すのではなく、印刷したいと思うでしょう。AJAX を実行するときは、メソッドからデータを返すだけでなく、実際にデータを出力する必要があります (ただし、これは私の言語の誤解かもしれません)。

次に、ライブラリを使用して、toArray() から作成された配列から JSON 文字列を作成する必要があります。そうしないと、jQuery は応答を JSON として認識せず、解析しません。

于 2012-11-16T18:14:21.260 に答える
0

JSON の代わりに dataType:"jsonp" を指定した場合に発生するエラーは、ある種のクロス ドメインの問題のようです。そして、dataType:"json" があるのに、なぜこのエラーが発生するのか疑問に思います。

私にとってはうまく機能しているように見える同様のコードがあります.そして、私のサービスのメソッドは「GET」タイプです.ここにあります:

    var availabletags=new Array();

    CallService2("GET", "ServiceUrl",
        function (data) {
            if (data) {
            $.each(data, function (index, item) {
                    availabletags.push(item);
                });
        },
        function (result) {
            alert('Service call failed: ' + result.status + '' + result.statusText);
        });

    function CallService2(method, serviceUrl, successHandler, errorHandler) {
    $.ajax({
        type: method,
        url: serviceUrl,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: successHandler,
        error: errorHandler
        });
    }

    $(function() {  
    $( "#tags" ).autocomplete({
        source: availableTags
    });
});

ページが読み込まれる直前にこのコードを呼び出します。それが役立つかどうか教えてください.すべてのベスト....

于 2012-11-16T19:12:09.273 に答える
0

大変興味深いことに。JQuery JSONP エラーのように見えますが、json を使用しています。エラーが添付したコードに対応していることを確認してください。関連する問題を参照してください: jsonp コンテンツ タイプを使用した jQuery.ajax リクエスト後のパーサー エラー

于 2012-11-16T23:23:43.967 に答える