-1

testテスト用の単純なリストを返すというC#ファイルでWeb関数を作成しました

[WebMethod(EnableSession = false)]
public static List<string> test()
{
    List<string> a = new List <string>() ; 
    a.Add("1s");
    a.Add("2s");
    return a; 
}

WEBMETHODJQUERY AJAXを使用してフロントエンドからこれを呼び出そうとしました

     function Test() {

            $.ajax({
                type: "POST",
                url: "Default.aspx/test",
                data: "",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {
                    x = msg;
                    $(".resultbox").html(msg.d);
                }
            });

            return x;

}

test() を呼び出すとき; コンソールからのメッセージは次のとおりです。

Uncaught Error: NOT_FOUND_ERR: DOM Exception 8   jquery-1.6.1.min.js:18

一般的なケースでは、オブジェクトを JSON に変換して返します。これは通常は機能しますが、オブジェクトが WEBMETHOD からフロント エンドに返される方法を知りたいのですが、オブジェクトはテキストにシリアル化されています。なぜこのエラーが発生したのですか。

4

3 に答える 3

1

これを試して。

function Test() {

    $.ajax({
        type: "POST",
        url: "Default.aspx/test",
        data: "",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (msg) {
            msg = msg.hasOwnProperty("d") ? msg.d : msg;
            $.each(msg, function (index, value) {
                $(".resultbox").append("<p>" + value + "</p>");
            });
        }
    });

}
于 2012-02-19T07:31:17.757 に答える
1

DOM 例外はinnerHTML()、jQuery のhtml()メソッドを介して に配列オブジェクトを渡すことに関連していると思います。代わりに、最初に配列値を文字列としてフォーマットしてみてください。

success: function (msg) {
  // Builds a string like '1s, 2s'
  var formattedMessage = msg.d.join(', ');

  $(".resultbox").html(formattedMessage);
}

もちろん、フォーマットされた文字列を手動で作成するのは楽しいことではありません。この状況を改善するには、jQuery テンプレートやその後継の JsRender などのクライアント側のテンプレート ソリューションを検討してください。

于 2012-02-19T18:59:05.320 に答える
-2

から文字列のリストを送信しているWebMethodためmsg、配列になります。その場合、結果msg.dが得られますundefined。コンマで区切られた結合文字列としてそれらを表示したい場合は、これを試してください。

ajaxデフォルトでは本質的に非同期であり、メソッドから ajax 応答を返すことはできませんTest。返却したい場合は、応答が来るまで待って返却できるように設定asyncします。false

function Test() {
            var x = null;//Define variable x
            $.ajax({
                type: "POST",
                async: false,
                url: "webservice.asmx/test",//Web service url
                data: "",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (msg) {
                    x = msg;
                    $(".resultbox").html(msg.join(','));
                }
            });

            return x;
}
于 2012-02-19T06:03:22.093 に答える