JSON解析错误Garble

时间:2013-08-15 22:31:41

标签: jquery .net web-services

我正在尝试使用jquery从客户端代码调用asmx webservice。但是我发现实际上很难实现这一目标。有人可以帮忙吗?

发生了什么:

  1. JsonConvert是我使用NewtonSoft将对象转换为json的库 返回。

  2. asmx托管在域名b.company.com

  3. 客户端ajax调用托管在域a.compay.com

  4. Fiddler正在接听单个呼叫二(2)401然后是200,这在回复的JSON选项卡中是不可见的。

  5. 这是asmx代码:

    [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public string PingCRM()
        {
            try
            {
                return JsonConvert.SerializeObject(new
                {
                    Status = "OK",
                    Data = "Hello CRM"
                });
            }
            catch (Exception ex)
            {
                return JsonConvert.SerializeObject(new
                {
                    Status = "ERROR",
                    Data = ex
                });
            }
        }
    

    这是一个ajax jquery代码:

    $.ajax({
                url: url,
                type: "POST",
                data: {},
                contentType: "application/json; charset=utf-8",
                dataType: 'json',
                success: function (result) {
                    console.log('ajax success');
    
                    console.log('result = [' + result + ']');
                },
                error: function (xhr, status, error) {
                    var txtError = 'status = [' + status + ']; Respsonse = [' + xhr.responseText + ']; Respsonse = [' + error + ']';
                    console.log(txtError);
                }
            });
    

    这是响应的提琴“原始”视图:

    HTTP/1.1 200 OK
    Cache-Control: private, max-age=0
    Content-Type: text/xml; charset=utf-8
    Vary: Accept-Encoding
    Server: Microsoft-IIS/7.5
    X-AspNet-Version: 4.0.30319
    Persistent-Auth: true
    X-UA-Compatible: IE=9
    Access-Control-Allow-Origin: *
    Access-Control-Allow-Headers: Content-Type, Accept
    Access-Control-Allow-Methods: GET, POST
    WWW-Authenticate: Negotiate oRswGaADCgEAoxIEEAEAAACWCH0UgarqcwAAAAA=
    Date: Thu, 15 Aug 2013 22:47:12 GMT
    Content-Length: 127
    <?xml version="1.0" encoding="utf-8"?>
    <string xmlns="http://b.company.com/">{"Status":"OK","Data":"Hello CRM"}</string>
    

1 个答案:

答案 0 :(得分:0)

响应被压缩(参见响应头:Content-Encoding: gzip)。 Fiddler应该能够为你解压缩,通常是点击响应顶部的一个栏(见下文)。如果您没有看到,请尝试升级到较新版本的Fiddler。

Fiddler response with gzip encoding

在问题中更新后编辑:现在问题是响应不是JSON格式,而是XML(XML文档中包含JSON),因此$.ajax将无法在result参数中为您解析它。您可以尝试更改服务器以实际返回JSON而不是XML,或者您可以从jqXHR对象获取响应文本,该文本作为第三个参数传递给success函数,提取JSON从XML中解析并将其解析为结果。