【问题标题】:JSON Parse Error GarbleJSON 解析错误乱码
【发布时间】:2013-08-15 22:31:40
【问题描述】:

我正在尝试使用 jquery 从客户端代码调用 asmx 网络服务。但是,我发现要真正实现这一点非常困难。有人可以帮忙吗?

发生了什么:

  1. JsonConvert 是我使用 NewtonSoft 制作的一个库,用于将对象转换为 json 回来了。

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

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

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

这是 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>

【问题讨论】:

    标签: jquery .net web-services


    【解决方案1】:

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

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

    【讨论】:

    • 好的:如何更换服务器?
    • 我没有使用过 ASMX 服务;那将是使用该标签提出的问题...
    猜你喜欢
    • 2014-07-17
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多