如何在GWT RPC中捕获AJAX beforeSend事件

时间:2013-08-29 08:51:49

标签: java ajax gwt asynchronous gwtp

请考虑以下带有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

有没有解决方法?

2 个答案:

答案 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();
                            }
                        }));