我已经通过我的WebServices代码来验证我实际上是在返回数据,但是当我检查JSON端的返回时,它总是说“null”。
以下是WebService代码的片段。
UPDATED :为了大大简化,我从Web服务而不是自定义对象返回一个简单的List,我也压缩了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。
答案 0 :(得分:-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)}
});
答案 1 :(得分:-2)
前几天我在wcf webservice上工作,同样发生在我身上。在最终的退货声明中,一切正常。数据在那里,但当我在另一边看到它时什么都没有。
问题是自定义对象(在您的情况下为LOCATION)具有可空属性但未定义为可为空。我做到了,它开始工作了。我仍然不确定为什么,但你应该尝试一次。
public class Location
{
public string? customer_identifier { get; set; }
public string[]? customer_site { get; set; }
}