[英]Handle null returned from a WCF service on the client-side
我有WCF
服务,正在使用AJAX
从Web应用程序中调用服务方法。 我的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();
这样做是希望在客户端接收非空值。 但是,此操作失败并显示以下错误。
我可能在这里做很多错误的事情,但是我需要知道从服务方法返回时如何管理/处理空值。 如果没有,我该如何处理不存在所请求项目的情况? 任何帮助表示赞赏。 谢谢。
这里的问题是当您提供正确或预期的输入时,将返回成功的响应,即积分变量具有js可以理解的已知值。 但是对于错误的输入,反序列化失败,因为服务的返回值为null,因此失败。
假设客户端html中的$('#id')。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方法,则该操作将失败,因为Integration对象将为null,但由于它是一个JS调用,因此在js控制台中静默失败。
Integration integration=new Integration();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.