我需要实现一个调用Web服务并返回响应的函数.
我试过了
public String getFolderJson(String path) {
String result="initial_value";
StringBuilder param = new StringBuilder();
param.append("?sessionId=").append(getSessionId());
param.append("&path=").append(path);
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, "https://localhost/folder" + param);
try {
builder.sendRequest(null, new RequestCallback() {
@Override
public void onResponseReceived(Request request,
Response response) {
result = response.getText();
System.out.println(response.getText());
//I need to return "result"
}
@Override
public void onError(Request request, Throwable exception) {}
});
return result; //the result get returned before the response is recieved.So i am getting the return value "initial_value".
}
catch (RequestException e) {}
return null;
}
Run Code Online (Sandbox Code Playgroud)
在调用 getFolderJson()Web服务时成功调用.但是result在收到respnse之前返回.所以我得到了retunr值"initial_value".
如何在getFolderJson()功能时从响应中返回值?
GWT不支持同步Ajax,因此您必须使用异步模式对应用程序进行编码.
GWT用于执行请求的低级对象是XMLHttpRequest(旧的IE版本除外),并且GWT始终将其open()async设置为true 的方法调用.因此,拥有同步ajax的唯一方法是维护自己的修改版本XMLHttpRequest.java.但同步ajax是一个坏主意,甚至jQuery已经弃用了这种可能性.
因此,gwt中的常规方法应该是您的方法返回void,并且在响应可用时传递带回调的附加参数.
public void getFolderJson(String path, Callback<String, String> callback) {
RequestBuilder builder = new RequestBuilder(...);
try {
builder.sendRequest(null, new RequestCallback() {
@Override
public void onResponseReceived(Request request, Response response) {
callback.onSuccess(response.getText());
}
@Override
public void onError(Request request, Throwable exception) {}
callback.onFailure(exception.getMessage());
});
} catch (RequestException e) {
callback.onFailure(exception.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
我宁愿使用gwtquery Promises语法而不是请求构建器:
Ajax.get("http://localhost/folder?sessionId=foo&path=bar")
.done(new Function(){
public void f() {
String text = arguments(0);
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10397 次 |
| 最近记录: |