【问题标题】:Using Ajax to send a var to a query使用 Ajax 将 var 发送到查询
【发布时间】:2019-05-07 05:48:09
【问题描述】:

我正在使用 POST 从使用 angularjs 的点击事件中获取数据。我想我已经编写了大部分代码,但是当我运行查询时出现“无效字符”错误。我认为当我从 javascript 中获取变量时,它可能与类型转换有关。

这是我的 java 文件帖子

@POST
@Path("module")
@Consumes(MediaType.APPLICATION_JSON)
public List<ModuleProcCount> getInput(int jobId) throws IOException{
    try (Dbc dbc = vehmPool.getDbc()){
        List<ModuleProcCount> pusher = statements.inMod(dbc, jobId);
        return pusher;
    } 
}

这里是函数或我的帖子

$scope.sendJobId = function(jobId) {    
        $http.post("rest/performance/module", jobId).then(function(response){
            $scope.pusher = response.data;

            for (var i = 0; i < $scope.pusher.length; i++) {
                var p = $scope.puller[i];
                console.log("modName: " + p.modName);
                console.log("modClass: " + p.cellClass);
                console.log("modData: " + p.modCount);
        }
    });

这是我的 HTML,其中包含 Angular 代码。

<table id="Table" class="JobID-table" style="text-align:center" >
    <tr class="table-Header">
        <th>JOB ID</th>
        <th>TIME FOR ALL MODULES(MILLISECONDS)</th> 
    </tr>
    <tr class="jobID-Table-tr" ng-repeat="p in puller | orderBy : '-modCount'"> 
        <td ng-click="sendJobId(p.modName)" class={{p.cellClass}}>
        {{p.modName}}   
        </td>
        <td class={{p.cellClass}}>
        {{p.modCount}}
        </td>
    </tr>
</table> 

【问题讨论】:

    标签: javascript java angularjs ajax


    【解决方案1】:

    您的 Java 方法设置为使用 JSON (@Consumes(MediaType.APPLICATION_JSON))。这意味着 JAX-RS 正在尝试将您的 POST 请求的主体解析为 JSON 对象,然后将其映射到您的使用者函数的参数类型,在本例中为 String

    由于您实际上并未在 POST 请求中发送 JSON 对象,因此您应该告诉 JAX-RS 您希望从有效负载接收原始文本:

    @Consumes(MediaType.TEXT_PLAIN)
    

    或者,您可以采用 JSON!由于您提到您的参数是一个整数,因此此示例使用一个带有单个整数参数的 JSON 对象,称为jobId

    /**
     * This class is used by JAX-RS to parse to and from JSON. The field
     * names used here (and by extension the getters and setters) should
     * match those used in your JSON.
     */
    class InputRequest {
        int jobId;
    
        public String getJobId() {
            return jobId;
        }
    
        public void setJobId(int jobId) {
            this.jobId = jobId;
        }
    }
    
    @POST
    @Path("module")
    @Consumes(MediaType.APPLICATION_JSON)
    public List<ModuleProcCount> getInput(InputRequest reqPayload) throws IOException {
        int jobId = reqPayload.getJobId();
    }
    

    在客户端,Angular 会自动将传递给负载的对象转换为 JSON 字符串,并为您设置 Content-type 标头 (ref)。

    $http.post('rest/performance/module', {
      jobId: 123456
    });
    

    【讨论】:

    • 我可以用 int 做这个吗?
    • 如果你想自动处理负载中的数据类型,你应该把它包装在一个 JSON 对象中。我将在我的答案中添加一个示例,
    猜你喜欢
    • 2017-10-07
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    相关资源
    最近更新 更多