简体   繁体   中英

JSON return data is always null from WebService (C#.NET)

I have stepped through my WebServices code to validate that I am actually returning data, but when I check the return on the JSON side, it always says "null."

Here is a snippet of the WebService code.

UPDATED : To simplify things greatly, I'm returning a simple List from the web service instead of a custom object, and I've condensed the AJAX call as well.

        [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;

            }

And here is the AJAX call ( UPDATED to reflect Kami's comments below):

          $.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);}
           });

The "alert(data.d)" line results in "TypeError: data is null", and if I change it to "alert(data)" I simply get an alert box that says "null."

I need help understanding why the web service is properly returning data, but it's not making it back to AJAX/JSON.

You are not passing the variable to the OnSuccess function.

Also, I have had issues in the past where you need to use an anonymous function to call your subfunction.

Try something like this

$.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)}
});

I was working on wcf webservice a days back and same was happening to me. At the final return statement everything was working fine. The data was there but when i saw it on the other side there was nothing.

The problem was custom object (in your case LOCATION) had a nullable property but was not defined as nullable. I did that and it started working. I am still not sure why but you should try it once.

public class Location
    {
        public string? customer_identifier { get; set; }
        public string[]? customer_site { get; set; }
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM