【问题标题】:Knockoutjs is calling a REST API Post twiceKnockoutjs 两次调用 REST API Post
【发布时间】:2020-11-06 07:57:53
【问题描述】:

我正在开发一个 ASP.NET MVC 应用程序,使用针对 MVVM 的 knockoutjs。我在尝试向 ASP.NET Core API 发布帖子时,来自淘汰赛的请求似乎发布了 2 次。下面是knockoutjs viewModel

var viewModel = function () {
    var self = this;
    self.Surname = ko.observable("").extend({ required: { message: 'Please supply your surname' } });
    self.Firstname = ko.observable("").extend({ required: { message: 'Please supply your firstname' } });
    self.Middlename = ko.observable("");
    self.Title = ko.observable().extend({ required: true });
     
    self.save = function () {
       
            $.ajax({
                contentType: 'application/json',
                url: 'https://localhost:44337/api/Student/SaveStudent',
                type: 'post',
                data: ko.toJSON(self),
                dataType: "json",
                processData:false;
                success: function (data) {
                    alert(data);
                    
                },
                error: function (err) {
                    alert(err.status + " : " + err.statusText);
                    self.Kill(false);
                }
                
            });
        }

    }
    
}
ko.applyBindings(new viewModel());

[HttpPost]
        public IActionResult SaveStudent(StudentDTO student)
        {
            var st = _studentService.SaveStudent(student);
             
            return Ok(st);
        }

在保存时,API 被命中两次,第一次返回状态 204,第二次显示:“请求失败”。 但是如果我使用邮递员调用相同的 API,它会成功执行而没有任何错误

【问题讨论】:

    标签: asp.net-mvc api rest knockout.js


    【解决方案1】:

    我的猜测是这部分导致您的问题:数据:ko.toJSON(self)。淘汰赛 vm 架构中的常见模式是提取要发送到单独模型内的服务器的所有数据,并在整个 pageVm 函数中使用该模型的实例。

    // separate model
    function Person(){
        var self = this;
        self.Surname = ko.observable("").extend({ required: { message: 'Please supply your surname' } });
        self.Firstname = ko.observable("").extend({ required: { message: 'Please supply your firstname' } });
        self.Middlename = ko.observable("");
        self.Title = ko.observable().extend({ required: true });
    }
    
    // inside of pageVM create an instance
    var data = new Person()
    
    //inside of your ajax call
    data: ko.toJSON(data),
    

    【讨论】:

      猜你喜欢
      • 2022-01-09
      • 2021-07-17
      • 1970-01-01
      • 2019-06-16
      • 1970-01-01
      • 1970-01-01
      • 2020-04-22
      • 1970-01-01
      • 2017-03-04
      相关资源
      最近更新 更多