0

WebServices コードをステップ実行して、実際にデータが返されていることを確認しましたが、JSON 側で戻り値を確認すると、常に「null」と表示されます。

WebService コードのスニペットを次に示します。

更新: 物事を大幅に簡素化するために、カスタム オブジェクトではなく Web サービスから単純なリストを返し、AJAX 呼び出しも要約しました。

        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]

        public List<string> GetLocations(string CustomerID)
        {
            List<string> LocationsList = new List<string>();

            string sql = "select customer_site from demand_addresses where customer_identifier=" + CustomerID;
            if (gDB.ExecuteRet(sql, "DB"))
            {

                DataTable dt = gDB.GetResultDataSet(0);
                int i = 0;
                if (dt.Rows.Count > 0)
                {
                    foreach (DataRow rs in dt.Rows)
                    {
                        LocationsList.Add(rs["customer_site"].ToString());
                    }
                }  
                else
                {
                    LocationsList.Add("No Data Found.");
                }

                return LocationsList;
            }
            else
            {

                LocationsList.Add("No Data Found.");
                return LocationsList;

            }

そして、これがAJAX呼び出しです(以下のKamiのコメントを反映するために更新されました)

          $.ajax({
                              type: "POST",
                              url: "/webservices/services.asmx/GetLocations",
                              data: "{ 'CustomerID': '" + selectedCustomer + "' }",               
                              contentType: "application/json; charset=utf-8",               
                              dataType: "json",               
                              success: function (data) { alert(data.d); },               
                              error: function (status) {alert(status);}
           });

"alert(data.d)" 行は "TypeError: data is null" になります。これを "alert(data)" に変更すると、単に "null" という警告ボックスが表示されます。

Web サービスがデータを正しく返しているのに、AJAX/JSON に戻らない理由を理解する助けが必要です。

4

2 に答える 2

-2

変数を関数に渡していませんOnSuccess

また、過去に無名関数を使用してサブ関数を呼び出す必要があるという問題がありました。

このようなことを試してください

$.ajax({
    type: "POST",
    url: "/webservices/services.asmx/GetLocations",
    data: "{ 'CustomerID': '" + selectedCustomer + "' }",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(data, resp) { OnSuccess(data,resp)}, // anon function may be needed
    error: function(data,resp) { OnError(data,resp)}
});
于 2012-12-12T18:18:36.187 に答える
-2

私は数日前に wcf webservice に取り組んでいましたが、同じことが起こっていました。最終的な return ステートメントでは、すべてが正常に機能していました。データはそこにありましたが、反対側で見たときには何もありませんでした。

問題は、カスタム オブジェクト (この場合は LOCATION) に null 許容プロパティがありましたが、null 許容として定義されていませんでした。私はそれをしました、そしてそれは働き始めました。理由はまだわかりませんが、一度試してみてください。

public class Location
    {
        public string? customer_identifier { get; set; }
        public string[]? customer_site { get; set; }
    }
于 2012-12-12T18:34:09.627 に答える