【发布时间】:2014-08-15 21:43:47
【问题描述】:
所以我用这种方法使用 WCF:
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
MathResult DoMath(double n1, double n2);
MathResult 的元素之一是商...任何当你除以 0 时,这个数字变得无限大。
WCF 以 INF 的值返回此字段。
这会导致问题,我收到“未捕获的 ReferenceError:未定义 INF”错误。
这是它返回的 JSON(如果 n1 = 1 且 n2 = 0):
{"__type":"MathResult:#Microsoft.Samples.ComplexTypeAjaxService","difference":1,"product":0,"quotient":INF,"sum":1}
这是我的代码:
$(document).ready(function(){
var derp = function(result)
{
$("#output").text(result.sum);
}
$("#btn1").click(function(){
var myurl = "http://localhost:54111/service.svc/DoMath";
$.ajax({
url: myurl,
data: { n1: $("#txt1").val(), n2: $("#txt2").val() },
type: 'GET',
success: derp,
error: function(){ alert("Oh ****"); },
dataType: 'jsonp'
});
});
});
这是数据合同:
[DataContract]
public class MathResult
{
[DataMember]
public double sum;
[DataMember]
public double difference;
[DataMember]
public double product;
[DataMember]
public double quotient;
}
它适用于它返回的任何其他值。
【问题讨论】:
-
那是无效的 JSON。 JSON 中没有
INF令牌。 -
那你建议我做什么?
-
向负责该代码的人记录错误。可靠的服务器端 JSON 编码器库不会犯这种错误。
-
那将是微软的 WCF 代码,哈哈……我想我会用 MS 记录一个错误。
-
哈哈 - 好吧,这确实是一个错误。如果它认为无法成功编码该值,则它应该在编码期间抛出异常,或者它应该选择一些有效的 JSON 值(
null可能吗?JSON 中也没有NaN)。它应该不做的是发出一些会在未来某个时候导致解析错误的东西。
标签: javascript jquery json wcf