【发布时间】: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 来查看响应的内容 - 这应该会为您提供有关失败请求的更多信息。