语义UI:api vs ajax调用

时间:2017-07-22 12:15:06

标签: jquery semantic-ui

我有一个包含两个字段的表单,用户名和密码。我正在使用Semantic 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调用替换Semantic 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语义调用为什么不起作用?

1 个答案:

答案 0 :(得分:1)

管理自己解决它,以备将来参考以防有人遇到同样的麻烦,这就是我如何解决它。 我通过管理.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;
                                }
                });


    });