我正在使用 AngularJS 开发一个网络应用程序,但我对此非常缺乏经验。
我的目标是让用户在文本字段中键入一些参数,然后使用该参数作为 GET 请求中的参数之一发送 GET 请求(使用 Angular 中的 $http 服务)。
请求的目标是 KDB+ 进程(来自 KX Systems 的专有列导向数据库/语言)。此过程可以采用以下形式的请求:
http://servername:1234/?queryToRunHere[paramFromApp]
Run Code Online (Sandbox Code Playgroud)
此调用应返回一个 JSON 字符串。由于网络服务器和此进程在不同端口上运行,我收到“Access-Control-Allow-Origin”错误,该错误阻止我将此查询运行到其他端口。我试图使用 $http.jsonp 命令(因为我读到它允许远程获取)但是这要求我提供一个“&callback”参数。这是不可能的,因为 KDB+ 将解释“?”右侧的所有内容。作为内部查询。
我不确定如何继续,但到目前为止,这些是我的想法:
KDB+ 为 Java 提供了一个 API(但就我所知的 JavaScript 而言不是这样)。也许我可以用 Java 编写某种 Web 服务,然后可以通过 angular 调用它,然后使用其原生 API 调用 KDB+。问题在于它创建了另一个要维护的程序,而且我不确定如何编写这样的服务(什么技术、框架等)。
在 Angular 中有另一种我不知道的方法,或者有一种方法不必在 $http.jsonp 中指定回调参数。
我将不胜感激任何帮助。
我正在尝试编写一个执行以下操作的简单应用程序:1.用户输入2个参数并单击按钮2. Angular调用返回JSON 3的外部JAVA Servlet.应用程序将json字符串输出到屏幕
我有一个问题,因为当我点击按钮没有任何反应.我相信(由于测试)发生这种情况的原因是,由于调用是异步的,因此返回的变量为null.
相关代码:
controllers.js
function myAppController($scope,kdbService) {
$scope.buttonClick = function(){
var dat = kdbService.get($scope.tName,$scope.nRows);
$scope.data = dat;
}
}
Run Code Online (Sandbox Code Playgroud)
services.js
angular.module('myApp.services', []).factory('kdbService',function ($rootScope,$http){
var server="http://localhost:8080/KdbRouterServlet";
return {
get: function(tname,n){
var dat;
$http.jsonp(server+"?query=krisFunc[`"+tname+";"+n+"]&callback=JSON_CALLBACK").
success(function(data, status, headers, config) {
console.log("1");
console.log(data);
dat=data;
}).
error(function(data, status, headers, config) {
alert("ERROR: Could not get data.");
});
console.log("2");
console.log(dat);
return dat;
}
}
});
Run Code Online (Sandbox Code Playgroud)
的index.html
<!-- Boilerplate-->
<h1>Table Viewer</h1>
<div class="menu" >
<form>
<label for="tName">Table Name</label>
<input id="tName" ng-model="tName"><br>
<label for="nRows">Row Limit</label> …
Run Code Online (Sandbox Code Playgroud)