请考虑以下带有ajax模式的示例
$.ajax({
url: "someUrl",
beforeSend: function(){
executeBeforeSend();
},
error: function(){
//some error
},
success: function(){
//some success function
}
});
如果我们在服务器调用之前执行了beforeSend
whick。
现在我们都知道GWT RPC使用Ajax来服务asynchronous
次调用。
private class MessageCallBack implements AsyncCallback<Message> {
@Override
public void onFailure(Throwable caught) {
/* server side error occured */
}
@Override
public void onSuccess(Message result) {
/* server returned result, show user the message */
}
}
但是,没有onBeforeSend
等方法。如何catch
event
?
有没有解决方法?
答案 0 :(得分:1)
您可以使用RpcRequestBuilder
返回RequestBuilder
的子类,其中您已覆盖send()
方法。
答案 1 :(得分:1)
您可以使用javaQuery库来处理此问题。 javaQuery 是jQuery到Java的部分端口,因此具有所有预期的 Ajax 方法:
$.ajax(new AjaxOptions().url("someUrl").dataType("json").type("GET")//get and json are default anyway
.beforeSend(new Function() {
@Override
public void invoke($ javaQuery, Object... params) {
executeBeforeSend();
}
})
.error(new Function() {
@Override
public void invoke($ javaQuery, Object... params) {
AjaxError error = (AjaxError) params[0];
Log.err("Error %d: %s", error.status, error.reason);
}
})
.success(new Function() {
@Override
public void invoke($ javaQuery, Object... params) {
if (params[0] instanceof JSONObject) {
JSONObject obj = (JSONObject) params[0];
//TODO
}
else {
JSONArray array = (JSONArray) params[0];
//TODO
}
}
})
.complete(new Function() {
@Override
public void invoke($ javaQuery, Object... params) {
executeComplete();
}
}));