语义 UI :api 与 ajax 调用

Semantic UI : api vs ajax calls

我有一个包含两个字段的表单,用户名和密码。我正在使用语义 UI / JQuery 来提交表单。

  $(document).ready(function () {

        $('#ValidateUser').form(
            {
                on: 'submit',
                fields: {
                    username: {
                        identifier: 'username',
                        rules: [{
                            type: 'empty',
                            prompt:'Username cannot be empty'
                        }]
                    },
                    password: {
                        identifier: 'password',
                        rules: [{
                            type: 'empty',
                            prompt:'Password cannot be emtpy'
                        }]
                    }
                },
                onSuccess: function(event){
                    event.preventDefault();
                    $.api({
                        url: '@Url.Action("Login", "Validation")',
                        serializeForm: true,
                        data: new FormData(this),
                        onSuccess: function (result) {
                            result.preventDefault();
                            if (result.Success) {
                                window.location = "/Dashboard/Dashboard";
                            }
                            else {

                                $('#formresult').append(result.Msg);
                            }
                            return false;
                        }
                    });

                }
            });
    });

然而,这不起作用。如果我用 $.ajax 调用替换语义 UI .api 调用,效果很好。

        $(document).ready(function () {

        $('#submitbutton').click(function(){
            $('#formresult').hide();
        });

        $('#ValidateUser').form(
                 {
                     on: 'blur',
                     fields: {
                         username: {
                             identifier: 'username',
                             rules: [{
                                 type: 'empty',
                                 prompt: 'Username cannot be empty'
                             }]
                         },
                         password: {
                             identifier: 'password',
                             rules: [{
                                 type: 'empty',
                                 prompt: 'Password cannot be emtpy'
                             }]
                         }
                     },

                     onSuccess: function (event) {
                         $('#formresult').hide();
                         event.preventDefault();
                         var formData = new FormData(this);
                         $.ajax({
                             url: '@Url.Action("Login", "Validation")',
                             type: "POST",
                             dataType: "json",
                             contentType: "application/json; charset=utf-8",
                             data: formData,
                             contentType: false,
                             processData: false,
                             success: function (result) {

                                 if (result.Success) {
                                     window.location = "/Dashboard/Dashboard";
                                 }
                                 else {
                                     $('#formresult').show();
                                     $('#formresult').text(result.Msg);
                                 }


                             },
                             error: function (result) {
                                 $('#formresult').show();
                                 $('#formresult').text(result);
                             }
                         });
                         event.preventDefault();
                     }
                 });


    });

谁能帮我弄清楚为什么。api 语义调用不起作用?

自己设法解决了它,以备将来参考,以防有人遇到同样的麻烦,这是我解决它的方法。 我通过管道传递了 .api 调用,而不是在表单验证成功时调用它。

这是完整的代码。

$(document).ready(function () {

        var urllink = '@Url.Action("Login", "Validation")';


        $('#ValidateUser').form(
                                 {
                                     on: 'blur',
                                     fields: {
                                         username: {
                                             identifier: 'username',
                                             rules: [{
                                                 type: 'empty',
                                                 prompt: 'Username cannot be empty'
                                             }]
                                         },
                                         password: {
                                             identifier: 'password',
                                             rules: [{
                                                 type: 'empty',
                                                 prompt: 'Password cannot be emtpy'
                                             }]
                                         }
                                     },
                                     onSuccess: function (event) {
                                         $('#formresult').hide();
                                         $('#formresult').text('');
                                         event.preventDefault();
                                         return false;
                                     }

                                 }
                               )
                             .api({
                                 url: urllink,
                                 method:'POST',
                                 serializeForm: true,
                                 data: new FormData(this),
                                 onSuccess: function (result) {
                                    $('#formresult').show();
                                    if (result.Success) {
                                        window.location = "/Dashboard/Dashboard";
                                    }
                                    else {

                                        $('#formresult').append(result.Msg);
                                    }
                                    return false;
                                }
                });


    });