使用带有AJAX和ASHX处理程序的令牌时的ParseError

时间:2014-01-07 10:04:38

标签: c# jquery asp.net ajax token

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

我测试过并且客户端执行获取令牌,但在尝试涉及令牌身份验证的方法时,会给出带有“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 CODE发送测试请求请求

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,语法错误“意外令牌T”。此错误发生在客户端警报上 找不到任何有完全相同问题的人。

1 个答案:

答案 0 :(得分:1)

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