Jquery Ajax - 返回布尔?

时间:2013-09-06 07:49:28

标签: jquery asp.net-mvc

新手问题,试图找出发送的电子邮件,并显示结果,似乎无法让它发挥作用。

function SendPreview() {
    var value = CKEDITOR.instances['Source'].getData();
    alert(value);
    var model = { EmailBody: value.toString(), EmailTo: $("#SendTo").val(), EmailSubject: $("#Subject").val() };
    var request = $.ajax({
        url: '/Campaign/SendPreviewEmail',
        async: false,
        type: 'POST',
        dataType: 'JSON',
        data: { model: JSON.stringify(model) },
        cache: false,
        success: function (data) {
            if (data) {
                alert("Message Sent");
            } else {
                alert("Message Not Sent, Please check details");
            }
        }
    });
}
[HttpPost]
[ValidateInput(false)]
public bool SendPreviewEmail(string model)
{
    var e = new EmailPreview();
    JavaScriptSerializer objJavascript = new JavaScriptSerializer();

    e = objJavascript.Deserialize<EmailPreview>(model);
    if (!string.IsNullOrEmpty(e.EmailTo) && !string.IsNullOrEmpty(e.EmailSubject) && !string.IsNullOrEmpty(e.EmailBody))
    {
        if (IsValidEmail(e.EmailTo))
        {
            _mailService.SendMail(account.Email, e.EmailTo, e.EmailSubject, e.EmailBody, true);
            return true;
        }
    }
    return false;
}

2 个答案:

答案 0 :(得分:13)

假设这是ASP.Net MVC,您应该从您的操作中返回ActionResult(或者至少从其中获取某些内容)。下一个问题是,返回true将意味着toString()将调用bool,从而产生字符串"True""False"。请注意,这两个等同于javascript中的true。相反,返回包含结果标志的JSON。

在jQuery代码中,你还设置了async: false这是一个非常糟糕的做法。事实上,如果您检查控制台,您会看到浏览器有关其使用的警告。您应该删除该属性,以便异步进行AJAX请求。您还在dataType调用中将JSON设置为ajax(),但实际上是返回一个字符串。试试这个:

function SendPreview() {
    var value = CKEDITOR.instances['Source'].getData();
    var model = { EmailBody: value.toString(), EmailTo: $("#SendTo").val(), EmailSubject: $("#Subject").val() };
    var request = $.ajax({
        url: '/Campaign/SendPreviewEmail',
        type: 'POST',
        dataType: 'JSON',
        data: { model: JSON.stringify(model) },
        cache: false,
        success: function (data) {
            if (data.emailSent) { // note the object parameter has changed
                alert("Message Sent");
            } else {
                alert("Message Not Sent, Please check details");
            }
        }
    });
}
[HttpPost]
[ValidateInput(false)]
public ActionResult SendPreviewEmail(string model)
{
    var e = new EmailPreview();
    var result = false;
    JavaScriptSerializer objJavascript = new JavaScriptSerializer();

    e = objJavascript.Deserialize<EmailPreview>(model);
    if (!string.IsNullOrEmpty(e.EmailTo) && !string.IsNullOrEmpty(e.EmailSubject) && !string.IsNullOrEmpty(e.EmailBody))
    {
        if (IsValidEmail(e.EmailTo))
        {
            _mailService.SendMail(account.Email, e.EmailTo, e.EmailSubject, e.EmailBody, true);
            result = true;
        }
    }
    return Json(new { emailSent = result });
}

答案 1 :(得分:3)

实际上return不会向浏览器发送任何内容,您必须写入要发送回浏览器的数据,可能是Response.Write,而不是熟悉此内容。

此外,在客户端

if (data)

对于任何数据都是相同的,如果任何数据发送回浏览器,它将评估为true,因此需要检查实际数据,可能是这样的

if (data == 1)

或者,对于json来说,它可能是

if (data.success) // if you send a json response.