ASP.NET AJAX返回JSON但未被识别为JSON
我有这个function让我回到经理列表
function getManagers() { var jqxhr = $.ajax({ type: 'POST', contentType: "application/json; charset=utf-8", url: '/webservice.asmx/GetManagers', dataType: 'json' }).success(function(data) { var options = 'Select Manager'; for (var i = 0; i < data.length; i++) { options += '' + data[i].Description + ''; } $('#ReceivingCellManager').html(options); }).error(function(data) { $('.ErrorText').html('Manager load failed please refresh page with F5'); $("#errormessage").dialog('open'); }).complete(function() { }); }
正如您所看到的,我正在使用JQuery,并希望与可用的管理器一起使用下拉列表
我服务中的方法看起来像这样
[WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public void GetManagers() { using (var context = new ConcessionModel()) { var rcm = Business.GetManager(); var serializer = new JavaScriptSerializer(); var response = rcm.Count() != 0 ? serializer.Serialize(rcm) : serializer.Serialize(new Error { Code = "500", Message = "Manager Retrieval Failed" }); this.Context.Response.Clear(); this.Context.Response.ContentType = "application/json"; this.Context.Response.Write(response); } }
当调用该方法时,我收到200 OK的响应并且响应包含JSON我希望我遇到的问题是响应未被识别为JSON。
我试过了
- 如上所示,将dataType添加到ajax调用
- 从响应结束时删除this.Context.Response.flush ,这可以解决我在发送后调整标题时遇到的错误。
- 在方法中添加响应格式
- 向上下文添加Response.ContentType这些都无法获得JSON所需的识别。 任何帮助将非常感激。
更新:JSON格式
{ “描述”: “数据”, “代码”: “数据”, “参考”: “数据”}
更新JSON响应我在响应中看到一些奇怪的东西我的响应如下
[{"Description":"data","Code":"data","reference":"data"}]{"d":null}
我不确定d null对象是什么
为了从服务中访问json对象(如“Dog”类的对象),方法返回类型应为“Dog”。 不要在服务中使用response.write。 然后,您可以使用“data.d”从成功消息中访问数据。
希望这可以帮助!
通过从ajax请求中删除contentType并将设置添加到Web配置来解决此问题,如本文所述, 请求格式无法识别,因为URL意外地以
感谢您的帮助1全面:)
尝试解析它,如下所示,它适用于我:
var result = JSON.parse(data, function (key, value) { var type; if (value && typeof value === 'object') { type = value.type; if (typeof type === 'string' && typeof window[type] === 'function') { return new (window[type])(value); } } return value; });
并将数据更改为结果:
for (var i = 0; i < result.length; i++) { options += ''; }
在success函数中,返回对象是’data’。
要访问json数据,您需要通过’data.d’访问它。
我不能帮助,但注意到你的网络服务确实返回无效,也许这也可能是为什么没有回应?
这对我有用:
[WebMethod] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public void HelloWorld() { JavaScriptSerializer serializer = new JavaScriptSerializer(); string strResponse = serializer.Serialize("World"); ; Context.Response.Clear(); Context.Response.ContentType = "application/json"; Context.Response.AddHeader("content-length", strResponse.Length.ToString()); Context.Response.Flush(); Context.Response.Write(strResponse); }