【问题标题】:Proper response to jquery.ajax json data sending from ASP.NET page正确响应从 ASP.NET 页面发送的 jquery.ajax json 数据
【发布时间】:2011-10-24 13:58:49
【问题描述】:

我的 ASP.NET WebForms 网站上有以下 ajax 电子邮件提交例程:

页面为用户提供了一个输入对话框,用户可以在其中输入数据。 数据被打包成这样的 json:

        var name = $("[id$='clientName']");
        var phone = $("[id$='clientPhone']");
        var serviceType;
        var serviceCost;

    $("#SubmitOrder").click(function () {

        var currName = name.val();
        var currPhone = phone.val();

        var json = "{'ClientName':'" + escape(name.val()) + "','ClientPhone':'" + escape(phone.val()) + "','ServiceType':'" + serviceType + "','ServiceCost':'" + serviceCost + "'}";
        var ajaxPage = "/sendmail.aspx?Send=1"; 
        var options = {
            type: "POST",
            url: ajaxPage,
            data: json,
            contentType: "application/json;charset=utf-8",
            dataType: "json",
            async: true,
            success: function (response) {                  
                $("#ResMsg").html(response);
            },
            error: function (msg) { alert("failed: " + msg); }
        };

        $.ajax(options);
    });

并被发送到 sendmail.aspx 进行处理。 sendmail.aspx 只是一个 web 表单页面,在调试时,它工作得很好。它正确接收并解析 JSON,然后启动异步邮件发送例程。

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            SendMail();
    }

private void SendEmail()
    {
        //Bunch of parsing and mail sender init

        mailSender.MessageSent += new MessageSentEventHandler(OnMessageSent);
        //Here we have subscribed to an async event that occurs when mail sender is done.

        // Other unimportant stuff

        mailSender.SendMessage(settings["mail.feedback.to.name"], settings["mail.feedback.to.email"], settings["mail.feedback.subject"], body);
    }

void OnMessageSent(object sender, MessageSentEventArgs args)
    {
        if (args.Status == MailSentStatus.Sent)
        {
            Response.Write("Everything is fine"); 
        }
        else
        {
            Response.Write("Oops. Error!"); 
        }
    }

问题:

在我的客户页面上,每当收到来自邮件发件人的回复时,我都会收到一个

失败:[object Object] 消息框。

显然我的error: 方法被执行而不是success:。但是邮件发件人发送邮件就好了。

从 ASP.NET 响应 jquery .ajax() 调用的正确方法是什么?在我的情况下我做错了什么?

【问题讨论】:

  • 在 mailSender.SendMessage() 之后执行 response.write,因为 mailSender.SendMessage 不会等待 OnMessageSent 事件被调用,并且您的 Response 会提前结束。
  • 您可以使用 fiddler 或 firebug 来查看响应的内容 - 这应该会为您提供有关失败请求的更多信息。

标签: jquery asp.net ajax json


【解决方案1】:

您告诉 $.ajax 期待 dataType: "json",因此它正在尝试(但失败)将返回的 HTML 解析为 JSON。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-27
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 2013-11-22
    • 2021-11-02
    • 1970-01-01
    相关资源
    最近更新 更多