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); }