【问题标题】:AJAX not success returning from asp.net server从 asp.net 服务器返回 AJAX 不成功
【发布时间】:2015-06-22 14:07:27
【问题描述】:

在练习 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;
        }
    }

}

谢谢!

【问题讨论】:

  • 您的警报位于错误的位置。你想要success: function (json) { alert(json.isvalid); }, error: function(jqXHR, textStatus, errorThrown) { console.log(textStatus, errorThrown); }
  • 我按照您的建议进行了更改(并编辑了问题),但问题仍然存在。行:警报(textStatus + errorThrown);给出按摩:parsererror Invalid JSON: {isvalid:'false'}
  • 尝试使用双引号{"isvalid":"false"}

标签: javascript c# jquery asp.net ajax


【解决方案1】:

最简单的改变(仍然不是很漂亮)就是改变这个......

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 + "\" }");

(请注意,您拼错了“应用程序”...并且您应该告诉调用者而不是返回 json 数据。)

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

当你说“AJAX调用不成功”时,是否出现错误?

我建议在 Google Chrome 中运行您的代码,打开开发人员选项(按 F12),进入“网络”选项卡,然后刷新您的网页。

观看“网络”选项卡,单击被调用的 URL,然后检查正在发送的请求和返回的响应。

然后还要检查控制台选项卡,看看是否有任何 JavaScript 错误被悄悄抛出。

【讨论】:

  • 天哪。我有点惊讶,但很高兴它有所帮助。但是,正如其他读者指出的那样,您确实应该使用 JSON.Net 或 JavaScriptSerializer 之类的东西来获取 C# 代码以创建可靠的 JSON 数据。 JSON.Net 更友好,请注意“JavaScriptSerializer”创建非标准 DateTime JSON 值的方法....
【解决方案2】:

尝试将此添加到您的 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);
}
.....

【讨论】:

  • 当 datatype: 'json' 设置时,msg 应该已经被解析为 json
  • 函数 ProcessRequest 无效。它不能返回 serializer.Serialize("{ isvalid: '" + response + "' }");
  • WTF,我几分钟前才开始工作,今天也是星期一....对不起各位,我还没起床
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
  • 2014-12-23
  • 1970-01-01
  • 1970-01-01
  • 2020-07-11
相关资源
最近更新 更多