Inspired by someone's example I don't remember where I've found it.
This method works only with GET
Example:
CrossSiteJsonRequestUtil.INSTANCE.doFetchURL("www.test.com",
"callbackmethodname", new AsyncCallback<JSONObject>() {
@Override
public void onFailure(Throwable caught) {
// TODO
}
@Override
public void onSuccess(JSONObject result) {
// TODO
}
});
import java.util.HashMap;
import java.util.Map;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.user.client.rpc.AsyncCallback;
public class CrossSiteJsonRequestUtil {
public static CrossSiteJsonRequestUtil INSTANCE = new
CrossSiteJsonRequestUtil();
private Map<String, AsyncCallback<JSONObject>> callbacks = new
HashMap<String, AsyncCallback<JSONObject>>();
private int curIndex = 0;
private static final String CALLBACK_PARAM_NAME = "callback";
public void doFetchURL(String baseUrl,
AsyncCallback<JSONObject> responseHandler) {
doFetchURL(baseUrl, CALLBACK_PARAM_NAME, responseHandler);
}
public void doFetchURL(String baseUrl, String callbackParamName,
AsyncCallback<JSONObject> responseHandler) {
String callbackName = reserveCallback(responseHandler);
setup(callbackName);
char sep;
if (baseUrl.contains("?")) {
sep = '&';
} else {
sep = '?';
}
addScript(callbackName, baseUrl + sep + callbackParamName + "="
+ callbackName);
}
private void setup(String callback) {
setup(this, callback);
}
private String reserveCallback(AsyncCallback<JSONObject>
responseHandler) {
while (true) {
if (!callbacks.containsKey("__gwt_callback" + curIndex)) {
callbacks.put("__gwt_callback" + curIndex, responseHandler);
return "__gwt_callback" + curIndex++;
}
}
}
private native static void setup(CrossSiteJsonRequestUtil
instance,
String callback) /*-{
window[callback] = function(someData) {
instan...@crosssitejsonrequestutil::handle(Lcom/google/gwt/
core/client/JavaScriptObject;Ljava/lang/String;)(someData,callback);
var scriptEl = document.getElementById(callback);
document.getElementsByTagName("body")[0].removeChild
(scriptEl);
window[callback] =null;
}
}-*/;
private native void addScript(String uniqueId, String url) /*-{
var elem = document.createElement("script");
elem.setAttribute("language", "JavaScript");
elem.setAttribute("src", url);
elem.setAttribute("id", uniqueId);
document.getElementsByTagName("body")[0].appendChild(elem);
}-*/;
@SuppressWarnings("unused")
private void handle(JavaScriptObject jso, String callback) {
JSONObject jsonObject = null;
AsyncCallback<JSONObject> responseHandler = callbacks.get(callback);
try {
jsonObject = new JSONObject(jso);
} catch (RuntimeException e) {
responseHandler.onFailure(e);
}
if (jsonObject != null) {
responseHandler.onSuccess(jsonObject);
}
}
}
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Google Web Toolkit" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/Google-Web-Toolkit?hl=en
-~----------~----~----~----~------~----~------~--~---