这与我在jquery的ajax函数中经常遇到的情况非常奇怪和相反。
我有以下javascript代码:
$.ajax({
url: "/myService.svc/DoAction",
type: "GET",
dataType: "json",
success: function (res) {
if (res.ErrorCode == 0) {
//do something
} else {
//do something
}
},
error: function (res) {
//do something
},
complete: function () {
//do something
}
});
我的服务以json格式构建响应。我的回复标题:
Response HTTP/1.1 304 Not Modified
X-AspNet-Version 4.0.30319
Content-Length 157
Content-Type application/json; charset=utf-8
我到达Success
...但是服务的响应没有解析为javascript对象...我收到一个像这样的普通字符串:
[{"ErrorCode": "0", "Data": {"title": "test", "data": [{"name": "someName", "id": "1234-12345678-abcd-1234"}]}, "ErrorMessage": ""}]
如果没有将json字符串解析为javascript对象,它如何到达success
?
如Jquery文档中所述:
[$.ajax]
[dataType]
"json": Evaluates the response as JSON and returns a JavaScript object. The JSON data is parsed in a strict manner; any malformed JSON is rejected and a parse error is thrown.
修改
我尝试返回一个无效的json字符串,我仍然输入success
...我觉得我错过了一些非常明显的东西!
答案 0 :(得分:0)
......我知道我错过了一些明显的东西!
我的服务是C#WCF,我在服务中返回String
。
我的web.config
包含以下内容,我在网上找到了有关构建WCF Web服务的教程的一部分:
<endpointBehaviors>
<behavior name="webBehavior">
<webHttp helpEnabled="true" defaultOutgoingResponseFormat="Json" automaticFormatSelectionEnabled="true" />
</behavior>
</endpointBehaviors>
请注意automaticFormatSelectionEnabled
,它确保无论发送什么内容,都会“正确”格式化。
解决方案有两个方面:
defaultOutgoingResponseFormat
和automaticFormatSelectionEnabled
,然后自行控制这些标记。 [他们似乎合适...... :(] ResponseObject
而不是String
。有人早些时候提出了这个问题......我现在同意这个问题。 :(