在练习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;
}
}
}
谢谢!
答案 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);
}
.....