AJAX没有成功从asp.net服务器返回

时间:2015-06-22 14:07:27

标签: javascript c# jquery asp.net ajax

在练习Ajax时,我编写了一个Ajax调用,使用用户名和密码向本地asp.net Handler.ashx发送一个Json,如果它们等于“jhon”“123456”则返回true,否则返回false。 我调试了代码,我看到Handler.ashx收到调用,进行验证,并写入响应,但Ajax调用不成功。

这是Ajax的调用:

$.ajax({
    url: '/Handler.ashx',
    dataType: 'json',
    data: {
        name: document.getElementById("username").value,
        password: document.getElementById("password").value
    },

    success: function (json) {
        alert(json.isvalid);
    },
    error: function (jqXHR, textStatus, errorThrown) {
        console.log(textStatus, errorThrown);
        alert(textStatus + "  " + errorThrown);
    }
});
alert("failed");

这是服务器端:

<%@ WebHandler Language="C#" Class="Handler" %>

using System;
using System.Web;

public class Handler : IHttpHandler {

    public void ProcessRequest(HttpContext context)
    {
        Console.WriteLine("check");
        var name = context.Request["name"];
        var password = context.Request["password"];

        string response = IsValid(name, password) ? "true" : "false";
        context.Response.ContentType = "appliaction/text";
        context.Response.Write("{isvalid:'" + response + "'}");
    }

    private bool IsValid(string name, string password)
    {
        Console.WriteLine("isvalid");
        return (name == "jhon" && password == "123456");
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

}

谢谢!

2 个答案:

答案 0 :(得分:2)

最简单的改变(仍然不是很漂亮)将改变这一点......

string response = IsValid(name, password) ? "true" : "false";
context.Response.ContentType = "appliaction/text";
context.Response.Write("{isvalid:'" + response + "'}");

......对此...

string response = IsValid(name, password) ? "true" : "false";
context.Response.ContentType = "application/json";
context.Response.Write("{ \"isvalid\" : \"" + response + "\" }");

(请注意,您错过了#34;应用程序&#34; ...您应该告诉您的来电者,而不是您返回的json数据。)

  

我看到Handler.ashx接到电话,进行验证,   并写入响应,但Ajax调用不成功。

如果您说&#34; AJAX呼叫不成功&#34;,是否会出现错误?

我建议您在Google Chrome中运行代码,打开开发者选项(按F12键),进入网络标签,然后刷新您的网页。

观看“网络”标签,单击要调用的URL,然后选中“正在发送的请求”,并回复“响应”。

然后还要检查“控制台”选项卡,以查看是否已经悄悄地抛出任何JavaScript错误。

答案 1 :(得分:0)

尝试将此添加到您的ProcessRequest方法

JavaScriptSerializer serializer = new JavaScriptSerializer();

[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public void ProcessRequest(HttpContext context)
    {
        Console.WriteLine("check");
        ....

        return serializer.Serialize("{ isvalid: '" + response + "' }");
    }

在客户端

.....
success: function (msg) {
    console.log(msg); //this is for you to see the response in the JS console
    var jsonArray = $.parseJSON(msg.d);
    console.log(jsonArray); //and this is the same
    alert(jsonArray.isvalid);
}
.....