我有WCF
服务,我使用AJAX
从我的网络应用程序调用服务方法。我的AJAX
电话如下。
$.ajax({
type: 'GET',
url: 'http://localhost:56083/Service1.svc/Web/GetIntegrationById?id=' + value,
dataType: 'json',
processData: true,
contentType: "application/javascript",
success: function (data) {
console.log(data);
},
failure: function (data) {
console.log("Failed " + data);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
console.log("Request: " + XMLHttpRequest.toString() + "\n\nStatus: " + textStatus + "\n\nError: " + errorThrown);
}
})
此调用用于实现搜索功能。 WCF
服务包含以上调用的以下方法。
public Integration GetIntegrationById(string id)
{
IntegrationList integrationList = new IntegrationList();
Integration integration;
integration = integrationList.CreateIntegrations().Where(i => id != null && i.IntegrationId == Convert.ToInt16(id)).FirstOrDefault();
return integration;
}
下面给出的 CreateIntegrations()
方法。(为测试目的而创建)
public Integration[] CreateIntegrations()
{
List<Integration> integrationList = new List<Integration>()
{
new Integration() { IntegrationId=1,... },
new Integration() { IntegrationId=2, ... },
new Integration() { IntegrationId=3, ... },
new Integration() { IntegrationId=4, ... },
new Integration() { IntegrationId=5, ... }
};
Integrations = integrationList;
return integrationList.ToArray();
}
现在,当我在搜索文本框中输入1-5之间的值时,我得到了相应的Integration对象。但是,当我输入上面列表中没有的内容时,例如,id = 8,正如预期的那样,整合的值为null,从web方法返回。这导致客户端上的解析器错误,因为它期望JSON
值并且接收它无法解析的null。所以我把最后一行改为
return integration ?? new Integration();
这样做是希望在客户端接收非空值。但是,这会因以下错误而失败。
我可能在这里做了大量的事情但是我需要知道如何从service方法返回时管理/处理null值。如果不是,我如何处理所请求项目不存在的情况?任何帮助赞赏。感谢。
答案 0 :(得分:0)
这里的问题是当你给出正确或预期的输入时,会返回成功的响应,即积分变量包含js理解的已知值。但是对于错误的输入反序列化失败,因为来自服务的返回值为空并因此失败。
假设客户端html中的$(&#39;#id&#39;)。val()保存您的输入ID值。
$.ajax({
type: 'Post',
url: 'http://localhost:56083/Service1.svc/Web/GetIntegrationById',
data: JSON.stringify({ id: $('#id').val() }),
dataType: 'json',
processData: true,
contentType: "application/json;charset=utf-8",
success: function (data) {
console.log(data);
},
failure: function (data) {
console.log("Failed " + data);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
console.log("Request: " + XMLHttpRequest.toString() + "\n\nStatus: " + textStatus + "\n\nError: " + errorThrown);
}
})
由于它是一个模拟服务,建议你创建Integration的类对象并适当调整。我相信,如果你在.net应用程序中调用GetIntegrationById方法,它将失败,因为集成对象将为null但是因为它是一个JS打电话,它在js控制台中默默地失败。
Integration integration=new Integration();