1

考虑以下带有 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 等这样的方法。catchevent怎么办?

有什么解决方法吗?

4

2 回答 2

1

您可以使用RpcRequestBuilder返回RequestBuilder您已覆盖send()方法的子类的一个子类。

于 2013-08-29T08:56:34.020 回答
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();
                            }
                        }));
于 2013-09-01T02:21:06.287 回答