使用api,它给我一个只能使用客户端ip的访问令牌,所以我试图在客户端向该外部站点发出请求,并将JSON响应返回给我的服务器。问题是如何在客户端上发出请求并存储JSON,以便我可以将其发送到服务器。
谢谢
答案 0 :(得分:3)
看看Vaadin的
集成JavaScript组件和扩展
这里:
https://vaadin.com/docs/-/part/framework/gwt/gwt-javascript.html#gwt.javascript.rpc
您可以创建一个JavaScript连接器组件,然后可以使用它来生成RPC:
@JavaScript({"mycomponent-connector.js"})
public class MyComponent extends AbstractJavaScriptComponent {
public MyComponent(){
// when you create the component
// add a function that can be called from the JavaScript
addFunction("returnResponse", new JavaScriptFunction() {
@Override
public void call(JsonArray arguments) {
String response = arguments.getString(0));
// do whatever
}
});
}
// set up a way to make the request
public void makeRequest(String url) {
callFunction("makeRequest", url);
}
}
使用JavaScript文件mycomponent-connector.js
(使用XMLHttpRequest
示例):
window.com_example_mypackage_MyComponent =
function() {
var connector = this;
// add a method to the connector
this.makeRequest = function(theUrl){
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
connector.returnResponse(xmlHttp.responseText);
}
};
xmlHttp.open("GET", theUrl, true); // true for asynchronous
xmlHttp.send(null);
}
};
在服务器端调用方法MyComponent.makeRequest("myurl")
将触发客户端上的makeRequest
方法。返回响应后,我们调用connector.returnResponse(xmlHttp.responseText)
将其发送回服务器,并由"returnResponse"
的构造函数中添加的MyComponent
函数处理。