为什么 AngularJS 形式 post 有时有一个参数为空?

Why does an AngularJS form post sometimes have one parameter empty?

我有一个很大的 AngularJS 应用程序,其中一个表单给我带来了麻烦。在此表单上,用户可以将保存在服务器上的消息写入数据库。但是,有 20% 的时间是某种错误导致消息为空白。我可以在数据库中看到这些空消息。

据我所知,问题出在客户端而不是服务器上。 (我的证据是我在服务器上添加了代码,在收到 Web 请求时记录所有表单数据。当空白消息保存到数据库中时,我可以看到消息文本已经丢失这些日志就在服务器端进程的开始。)

所以,我认为这可能与我从客户端发送数据的方式有关。我的JavaScript如下...

var params = {
    "slotid": self.slot.slotid,
    "personid": self.personid,
    "message": self.slot.message
};

$http({
    method: 'POST',
    url: '/restapi/confirmationmessage.aspx',
    data: $.param(params),
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
})

运行时,服务器上的表单数据如下所示:-

slotid=SOME-GUID8&personid=ANOTHER-GUID&message=the+message+goes+here

失败时如下所示:-

slotid=SOME-GUID8&personid=ANOTHER-GUID&message=

接受消息输入的网页使用Bootstrap编写,相关片段如下。如果文本框为空,提交按钮将被禁用,因此永远不会出现空白消息!

<div class="form-group">
    <textarea class="form-control" ng-model="slot.message" placeholder="Enter your message here..." rows="8"></textarea>
</div>
<button type="button" ng-click="ctrl.areyousure('message', slot, '');" ng-disabled="slot.message==''" class="btn btn-default">
    <span class="glyphicon glyphicon-envelope">&nbsp;</span>
    <span>Send message</span>
</button>

如果有帮助,我的后端是使用 C# ASP.NET 编写的。

谁能解释为什么消息参数有时为空?这是一个间歇性故障,所以我认为这可能与消息中的异常字符有关,但我已经尝试过,逗号、引号、双引号和分号,但它们都可以正常工作。会不会是 $.param() 函数的限制?

关于如何向我的客户端代码添加一些日志记录以帮助诊断问题的一些建议,或者任何类似的想法来帮助我解决这个问题,也会很有用。

提前致谢。

亚当

slot.message 的初始值将为 null 或未定义,因此您也应该添加这些情况。

但这不是检查所需值的正确方法。您应该使用 ng-required 属性,这里是使用 form-ng-required

的示例