AngularJS 未捕获类型错误:无法读取未定义的属性'notify'&&控制器将 html 表单值读取为 NULL



我是AngularJS的初学者。我正在实现一个用于实践的CRUD应用程序。它有一个单独的学生表,包含姓名、密码、电子邮件和电话字段。我使用MySQL作为我的数据库。我的应用程序应按以下方式工作:HTML页面读取字段的值,并将这些值传递给controller.js,后者随后调用servlet。servlet随后连接到数据库并插入这些值。目前我正在使用$http.post()来调用servlet。这些值应该以JSON格式传递给servlet。

根据我所学到的,HTML表单中的值是使用$scope读取的。但表单元素的值在我的controller.js中为null。这是我的HTML文本输入元素:

<form name="regform" role="form" class="form-signin" action='InServlet'>
  <input type="text" class="form-control" id="n1" name="name" placeholder="Enter Name"
           ng-model="std.name" ng-model-instant required autofocus/> 
  <input type="password" class="form-control" id="n2" name="pwd" placeholder="Enter Password" required ng-model="std.pwd" ng-model-instant  maxlength="8"/>
  <input type="email" class="form-control" id="n3" name="mail" placeholder="Enter Email" required ng-model="std.mail" ng-model-instant />
  <input type="text" class="form-control" id="n4" name="phone" placeholder="Enter Phone" required minlength="10" maxlength="14" ng-model="std.phone" ng-model-instant />
  <button name="save" id="save" type="submit" class="btn btn-md btn-primary"
            ng-disabled="regform.$invalid" 
            ng-Click="callInHttp(std)">
</form>

这里是controller.js,我在这里读取的值

angular.module('appcontrollers', [])
.controller('MyCtrl2', ['$scope','$http', function($scope,$http,jsonFilter)
  {
  $scope.callInHttp=function($scope,std)
        {
           alert("std:"+$scope.std);   -->THIS DISPLAYS UNDEFINED
           .....
           /**CODE to call servlet**/
        }
  }

浏览器日志中的错误显示:"未捕获的类型错误:无法读取未定义的属性'notice'"。

我需要以下方面的帮助:1) 请告诉我在阅读HTML表单输入值时哪里出错,以及应该如何更正。2) 我应该如何将angularjs中的HTML表单输入值转换为JSON格式?3) 如何将JSON数据发送到javaservlet?4) Servlet应该如何将JSON数据转换为字符串,以便将数据插入数据库?

任何帮助都将不胜感激。提前谢谢。

Angular不需要对表单执行操作。事实上,如果你加上它的角度,就会停止在表单上工作

删除action=""并将其更改为ng-submit="callInHttp()"。然后,您可以在函数中使用this来访问表单中的数据,即this.std.name

我认为您不需要jsonFilter。当您将对象作为数据传递给$http时,它会将其转换为JSON。

我不知道servlet是什么意思——你指的是服务器上的脚本?这本身就是另一个问题(与angular无关),但是您的JSON将在例如脚本的$_POST变量中可用。

您应该查看angular服务和工厂。这是您应该做ajax工作的地方,而不是从控制器。

以下是您需要的澄清:

  1. 请告诉我在阅读HTML表单时哪里出错了输入值以及我应该如何更正。

    请参阅互联网上的教程,了解有关表单提交的更多信息。本教程内容丰富。

  2. 我应该如何在中将HTML表单输入值转换为JSON格式angularjs?和

  3. 如何将JSON数据发送到javaservlet?

    当您使用$http服务传递GETPOST方法时,请求可以以JSON结构本身发送。例如,一个post请求看起来是这样的:

    $http({ url: "URL", method: "POST", data: { 'param1' : param1value, 'param2' : param2value}).success(function(data){..})

    请注意,作为输入传递的data必须与它所映射到的对象的方式完全相似。这是请求到对象的正确JSON映射所必需的。

  4. Servlet应该如何将JSON数据转换为字符串,以便将数据插入数据库?

    您可以使用GSON库进行此转换。示例:

    Gson gson = new Gson();
    // get the JSON request into a StringBuilder object
    StringBuilder requestContent = new StringBuilder();
    BufferedReader reader = request.getReader();
    try {
        String line;
        while ((line = reader.readLine()) != null) {
            requestContent.append(line).append('n');
        }
    } finally {
        reader.close();
    }
    // transform the input JSON request into YOUR_OBJECT object
    userDetails = gson.fromJson(requestContent.toString(), YOUR_OBJECT.class);
    

    在本例中,YOUR_OBJECT是要将JSON请求映射到的对象。如前所述,JSON请求的结构(如对象中变量的名称将与前端从$http服务传递的参数相同)必须与对象的结构完全相似。否则映射将无法正常工作。

    有关Gson的详细信息,请参阅此。

最新更新