Jquery ASP.NET AJAX返回JSON但未被识别为JSON

Jquery ASP.NET AJAX返回JSON但未被识别为JSON,jquery,ajax,asp.net-3.5,Jquery,Ajax,Asp.net 3.5,我有这个功能,可以让我返回一个经理列表 function getManagers() { var jqxhr = $.ajax({ type: 'POST', contentType: "application/json; charset=utf-8", url: '/webservice.asmx/GetManagers', dataTy

我有这个功能,可以让我返回一个经理列表

function getManagers() {
   var jqxhr = $.ajax({
                   type: 'POST',
                   contentType: "application/json; charset=utf-8",
                   url: '/webservice.asmx/GetManagers',
                   dataType: 'json'
               }).success(function(data) {
                   var options = '<option selected="selected" disabled="disabled">Select Manager</option>';
                   for (var i = 0; i < data.length; i++) {
                       options += '<option value="' + data[i].PostRef + '">' + data[i].Description + '</option>';
                   }
                   $('#ReceivingCellManager').html(options);
               }).error(function(data) {
                   $('.ErrorText').html('Manager load failed please refresh page with F5');
                   $("#errormessage").dialog('open');
               }).complete(function() {
           });
} 
调用该方法时,我收到一个200 OK的响应,该响应包含我想要的JSON。我遇到的问题是,该响应未被识别为JSON

我已经试过了

  • 如上所示,将数据类型添加到ajax调用中
  • 从响应末尾删除this.Context.Response.flush,这就纠正了我在发送标题后调整标题时遇到的错误
  • 向方法添加响应格式
  • 向上下文添加响应.ContentType 这些都未能让我获得JSON所需的识别。任何帮助都将不胜感激
更新:JSON格式

{“说明”:“数据”,“代码”:“数据”,“参考”:“数据”}

更新JSON响应 我在回答中看到了一些奇怪的东西我的回答如下

[{"Description":"data","Code":"data","reference":"data"}]{"d":null}

我不确定d null对象是什么

请尝试解析它,正如我在下面所示,它对我有效:

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 += '<option value="' + result[i].PostRef + '">' + result[i].Description + '</option>';
                   }
for(变量i=0;i
尝试解析它,如我在下面所示,它对我很有用:

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 += '<option value="' + result[i].PostRef + '">' + result[i].Description + '</option>';
                   }
for(变量i=0;i
在success函数中,返回对象是“data”


为了访问json数据,您需要通过“data.d”访问它


我不禁注意到,您的web服务确实返回void,这可能也是没有响应的原因???

在success函数中,返回对象是“data”


为了访问json数据,您需要通过“data.d”访问它


我禁不住注意到您的web服务确实返回void,这可能也是没有响应的原因???

通过从ajax请求中删除contentType并向web配置中添加设置解决了问题,如本文所述


感谢您的帮助。1 ups所有方面:)通过从ajax请求中删除contentType并向web配置中添加设置(如本文所述),解决了此问题


感谢您的帮助。1 ups all arround:)

为了从服务访问json对象,例如类为“Dog”的对象,方法返回类型应为“Dog”。不要使用response.write-in服务。然后,您可以使用“data.d”访问成功消息中的数据


希望这有帮助

为了从服务访问json对象,例如类为“Dog”的对象,方法返回类型应该是“Dog”。不要使用response.write-in服务。然后,您可以使用“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);


}
这对我很有用:

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


}


为什么不使用WCF(带REST)和JSON响应。。。你自己改变一切真的很糟糕!您的成功数据是否包含JSON,您是否可以发布一个示例转储?:)@马可约翰森感谢你的回应,不,成功不会开火,错误会开火。我刚刚运行了一个小测试,错误也不包含数据。请使用fiddler之类的工具检查响应,看看您的代码中出现了什么错误。@Marcojohanesen我无法在此处发布数据,因为它包含一些敏感项,但我将发布格式为什么不使用WCF(带REST)和JSON响应。。。你自己改变一切真的很糟糕!您的成功数据是否包含JSON,您是否可以发布一个示例转储?:)@马可约翰森感谢你的回应,不,成功不会开火,错误会开火。我刚刚运行了一个小测试,错误也不包含数据。请使用fiddler之类的工具检查响应,看看代码中出现了什么错误。@Marcojohanesen我无法在此处发布数据,因为它包含一些敏感项,但我将发布format@dhavaishukla我认为我不需要将数据解析为JSON这应该是预期返回的数据类型,如果我在这里错了,请让我know@dhavaishukla我不认为我需要将数据解析为JSON,因为这应该是预期的返回数据类型,如果我在这里出错,请告诉我我正在作为循环中的数据访问数据对象,服务返回void,因为它们正在写入响应,而不是返回标准对象。与其写入响应,不如返回整个对象。然后ajax方法会将其识别为json!我将数据对象作为循环中的数据访问,服务返回void,因为它们正在写入响应而不是返回标准对象。与其写入响应,不如返回整个对象。然后ajax方法会将其识别为json!经过3天的挠头和挣扎,你的解决方案对我来说是有效的。非常感谢。经过3天的挠头和挣扎,你的解决方案对我来说是有效的。非常感谢。干得好!非常感谢。干得好非常感谢。