【问题标题】:.ajax, what goes in the success option?.ajax,成功选项中有什么?
【发布时间】:2013-03-06 03:09:59
【问题描述】:

我正在构建一个 MVC,并且正在尝试我的第一个 ajax 调用。它所做的只是向控制器 Action Method 发送一个 int,它将一些数据保存到 DB,然后返回一个“成功保存”的视图。我知道 action 方法有效,因为我有一个 ActionLink 用 Get 发送 id,一切都很好。现在我需要将其切换为 Post,而 ActionLinks 不做 Post。所以我正在尝试ajax。

这是我的 ajax:

 $(document).ready(function () {
    $("#button-save").click(function () {
        var applicantId = $("#PersonModel_ApplicantID").val();

        $.ajax({
            url: '<%: Url.Action("SaveRecord") %>',
            data: { 'id': applicantId },
            type: "post"
        });
    });
});

我知道这部分有效,但我需要有一个“成功”选项,因为现在“成功保存”页面没有显示。我看过一些不同的教程,老实说,成功的事情让我感到困惑。操作方法已全部设置为传递所需的消息:

        }
        else
        {
            return View("Error_RecordExists");
        }

        return View(model);

所以我想知道是否有办法告诉 ajax(一旦它发送了 ID,就让开,或者其他什么。谢谢。

【问题讨论】:

标签: jquery ajax asp.net-mvc


【解决方案1】:

success 部分是 Ajax 成功完成时调用的函数。它将有许多东西作为参数通过 jQuery 传入,包括响应。

函数的定义是...

Function( PlainObject data, String textStatus, jqXHR jqXHR )

所以你会这样做......

$.ajax({
    ...
    success: function(data, textStatus, jqXHR) {
        $("#SomeResultDiv").html(data); //Put the response in the div with Id "SomeResultDiv"
    }
});

data 对象包含作为字符串的响应。

textStatus 是不言自明的。请求的 Http 状态的文字描述。

jqXHR 是 jQuery XmlHttpRequest 对象 - 它是每个浏览器中使用的 XmlHttpRequest 的包装器。它提供诸如标头、http 响应代码等信息...有关详细信息,请参阅文档。

如果你不想这样,你可以省略列表末尾的参数

    success: function(data) {...}

完全有效。

请注意,您可以使用$.json() 而不是$.ajax() 来调用返回Json 对象的Web 方法。当您的服务器不知道格式化时,这些非常方便。例如,您有一个服务器,它只将统计数据报告为 JSON 对象。您的 Javascript 可以加载该数据,然后根据需要创建 divs/graphs/etc。为您提供漂亮干净的服务器端代码、关注点分离(数据与格式)以及许多其他优点。

【讨论】:

    【解决方案2】:

    下面是一个使用 webmethod 的简单邮件发送代码示例

    [System.Web.Services.WebMethod]
    public static int SendMail(string Name, string FromEmail, string Body)
    {
        StringBuilder sbBody = new StringBuilder();
        string ToEmail = "goldramesh.cool@gmail.com";
        sbBody.Append(Name + ",");
        sbBody.Append("<br/>");
        sbBody.Append("<br/>");
        sbBody.Append(Body);
        Contact contact = new Contact();
        //string script = "alert('Message sent successfully');window.location ='Contact.aspx';";
        System.Net.Mail.MailMessage eMail = new System.Net.Mail.MailMessage();
        eMail.From = new System.Net.Mail.MailAddress(FromEmail);
        eMail.To.Add(ToEmail);
        eMail.Subject = "Contact from  " + FromEmail;
        eMail.IsBodyHtml = true;
        eMail.Body = Body;
        SmtpClient SMTP = new SmtpClient();
        SMTP.Send(eMail);
        eMail.Dispose();
        contact.Clear();
        return 1;
    }
    

    而Ajax编码是

    var pageUrl = 'Contact.aspx';
            $.ajax({
                url: pageUrl + '/SendMail',
                type: "POST",
                data: '{Name: "' + Name + '",FromEmail: "' + FromEmail + '",Body: "' + Body + '"}',
                dataType: "json",
                contentType: "application/json",
                **success: function (data) {// Success 
                    if (data.d == 1) {//Check success code** 
                        $("input[type=button]").val("Send Mail");
                        alert("Mail successfully sent");                     
                    }
                }
            });  
    

    我的 web 方法是返回 1。所以我检查了 data.d==1

    你可以看看我的示例方式......

    【讨论】:

    • 请注意,您没有正确转义您传入的数据 - 例如,如果 Name 包含逗号怎么办?更好的是:data: JSON.Stringify({Name: Name, FromEmail: FromEmail, etc...})
    • 是的。我是对的。你为什么使用 JSON.Stringify????我的示例代码对我来说是正确的。
    • api.jquery.com/jQuery.param - 您使用的是“传统”参数序列化,但您使用的是字符串连接。假设您的 Name 字段是 Something with a " inside,您的数据将是 ...'{Name: "Something with a " inside", FromEmail: "abc@def.com" ...`。见 api.jquery.com/jQuery.ajax 和 @ 987654323@
    猜你喜欢
    • 2011-01-10
    • 2018-04-27
    • 2017-12-10
    • 2012-02-09
    • 2018-09-27
    • 2011-07-19
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多