【问题标题】:ParseError when using a Token with AJAX and ASHX handler使用带有 AJAX 和 ASHX 处理程序的令牌时出现 ParseError
【发布时间】:2014-01-07 10:04:38
【问题描述】:

我只是尝试使用我在处理程序上生成的令牌并返回到客户端进行身份验证。 (目的:使用令牌对所有请求进行身份验证,而不是第一个身份验证步骤)

我进行了测试,客户端确实获得了令牌,但是在尝试涉及通过令牌进行身份验证的方法时给出了“parsererror”状态和“Unexpected Token T”语法错误的描述错误。

生成运行良好的令牌的代码

        byte[] time = BitConverter.GetBytes(DateTime.Now.ToBinary());
        byte[] key = Guid.NewGuid().ToByteArray();
        string _token = Convert.ToBase64String(time.Concat(key).ToArray());

发送测试请求请求的 AJAX 代码

function test() {
        var jsonParam = { token: _token , type: "check" }
        $.ajax({
            url: "Test.ashx",
            type: "post",
            data: JSON.stringify(jsonParam),
            dataType: "json",
            contentType: 'application/json; charset=utf-8',
            async: false,
            success: function (response) {

                document.getElementById('eCode').innerHTML = response.eCode;

            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                alert(XMLHttpRequest.responeText + "\r\nStatus: " + textStatus + "\r\n" + "Error: " + errorThrown);
            }
        });

    }

响应此 AJAX 请求的服务器代码

if (postType == "check")
    {
        // (dict is the deserialized received JSON, a dictionary of [string, object]

        string _token = dict["token"] as string;
        byte[] data = Convert.FromBase64String(_token);
        DateTime when = DateTime.FromBinary(BitConverter.ToInt64(data, 0));
        if (when < DateTime.Now.AddHours(-12))
        {
            // Too old
            context.Response.Write(new Code { eCode = "old" });
        }
        else if (when > DateTime.Now.AddHours(1))
        {
            // Impossible
            context.Response.Write(new Code { eCode = "impossible" });
        }
        else
        {
            // Good
            context.Response.Write(new Code { eCode = "Time: " + when.ToString("dd/MM/yyyy") });
        }


    }

并且收到以下错误:parsererror, Syntax Error of "unexpected token T"。此错误出现在客户端警报上 找不到遇到完全相同问题的人。

【问题讨论】:

  • 你从哪里得到错误?客户端还是服务器?哪一行代码?
  • 错误来自客户端的alert
  • 它给了你什么?

标签: c# jquery asp.net ajax token


【解决方案1】:

通用处理程序返回的 JSON 格式不正确,甚至不是 JSON。您可以通过将dataType 属性设置为text 来检查处理程序的输出吗?像这样:dataType: "text"

【讨论】:

  • 你说得对,我只是忘了序列化“代码”对象,多么愚蠢的错误!谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-11-09
  • 1970-01-01
  • 2011-09-19
  • 1970-01-01
  • 2015-12-08
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
相关资源
最近更新 更多