为什么AngularJS表单帖子有时会有一个参数为空?

时间:2016-09-06 13:25:24

标签: javascript jquery angularjs http-post angular-http

我有一个非常大的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编写,相关片段如下。如果textarea框为空,则禁用提交按钮,因此不应发生空白消息!

<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中编写的。

有人可以解释为什么message参数有时是空的吗?这是一个间歇性的错误,所以我认为它可能与消息中的不寻常字符有关,但我已经尝试过,逗号,引号,双引号和分号,但它们都运行良好。它可能是函数$ .param()中的限制吗?

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

提前致谢。

亚当

1 个答案:

答案 0 :(得分:0)

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

但这不是检查所需价值的正确方法。您应该使用ng-required属性,这是使用form-ng-required Angular form validation ng-disabled not working

的示例