0

Webサービスにデータテーブルがあります。

 [WebMethod]
        [ScriptMethod]
        public DataTable mydbCon()
            {
SqlConnection SqlCon = new SqlConnection(@"Data Source=myds;Initial Catalog=name;Persist Security Info=True;User ID=sa;Password=pwd");
                SqlCon.Open();
                SqlCommand SqlComm = new SqlCommand();
                SqlComm.Connection = SqlCon;
                SqlComm.CommandType = CommandType.Text;
                SqlComm.CommandText = "select password from tbl_login where username='aby';";
                DataTable EmployeeDt = new DataTable("tbl_login");
                SqlDataAdapter SqlDa = new SqlDataAdapter(SqlComm);
                SqlDa.Fill(EmployeeDt);
                return EmployeeDt;
            }

HTMLページでAjax呼び出しを行っていますが、このようになり、エラーメッセージを表示する値を取得できません。

<script type="text/javascript">
       function GetAge() {
           jQuery.support.cors = true;
           $.ajax({
               type: "POST",
               contentType: "application/json; charset=utf-8",
               dataType: "json",
               jsonp: 'jsonp_callback',
               async: false,
               url: "http://localhost:50113/Service1.asmx/mydbCon",
               data: "{}",
               success: function (msg) {
                    $('#divToBeWorkedOn').html(msg.d);
                },
               error: function (e) {
                   $('#divToBeWorkedOn').html("unavailable");
               }
           });
       }
      </script> 
4

2 に答える 2

1

jQuery ドキュメントから抽出: "json": 応答を JSON として評価し、JavaScript オブジェクトを返します。jQuery 1.4 では、JSON データは厳密な方法で解析されます。不正な形式の JSON は拒否され、解析エラーがスローされます。(適切な JSON 形式の詳細については、json.org を参照してください。)

そのため、Web サービスが適切な JSON 形式で応答しない場合、エラー ケースが実行されます。

ここで2つの解決策:

  1. sQveで提案されているように、 [ScriptMethod(ResponseFormat = ResponseFormat.Json)] を JSON 形式の応答に追加してみてください。

  2. 直接データを受け入れ、Web サービスから「msg.d」データのみを返すように JavaScript コードを変更します。

    <script type="text/javascript">
        function GetAge() {
            jQuery.support.cors = true;
            $.ajax({
                type: "POST",
                async: false,
                url: "http://localhost:50113/Service1.asmx/mydbCon",
                success: function (msg) {
                    $('#divToBeWorkedOn').html(msg);
                },
                error: function (e) {
                    $('#divToBeWorkedOn').html("unavailable");
                }
          });
      }
      </script> 
    

プロパティを 1 つしか使用していないのに、多くのデータを含む完全な JSON オブジェクト (シリアル化および非シリアル化) を投稿するのはなぜですか? それを簡単に :)

于 2012-08-21T12:40:28.257 に答える
0

最後に、「msg」行 $('#divToBeWorkedOn').html(msg.text); の後に「.text」を追加する必要がある答えを見つけました。

<script type="text/javascript">
     function GetAge() {
         jQuery.support.cors = true;
         $.ajax({
             type: "POST",
             async: false,
             url: 'http://localhost:50113/Service1.asmx/mydbCon?wsdl',
             success: function (msg) {
                   $('#divToBeWorkedOn').html(msg.text); 

             },
             error: function (e) {
                 $('#divToBeWorkedOn').html("unavailable");
             }
         });
     } 
  </script>   

palmpalm さん、Yuriy さん、そして皆さんのサポートに感謝します

于 2012-08-22T05:48:45.970 に答える