I expect thats what I'm missing then! My calling method is as follows:
public native static void getJson(int requestId, String url, CallModel handler) /*-{ var callback = "callback" + requestId; var script = document.createElement("script"); script.setAttribute("src", url+callback); script.setAttribute("type", "text/javascript"); window[callback] = function(jsonObj) { [EMAIL PROTECTED]::handleJsonResponse(Lcom/google/ gwt/core/client/JavaScriptObject;)(jsonObj); window[callback + "done"] = true; } // JSON download has 1-second timeout setTimeout(function() { if (!window[callback + "done"]) { [EMAIL PROTECTED]::handleJsonResponse(Lcom/ google/gwt/core/client/JavaScriptObject;)(null); } // cleanup document.body.removeChild(script); delete window[callback]; delete window[callback + "done"]; } , 1000); document.body.appendChild(script); }-*/; I have adapted it from a useful guide here: http://giantflyingsaucer.com/blog/?p=126 Eggsy On Oct 7, 12:24 pm, Adam T <[EMAIL PROTECTED]> wrote: > I think what you are missing is the function name in your output from > the servlet. From what I see, you just return: > > [{color: \"red\",value: \"#f00\"}] > > when I would expect a response something like: > > mycallback([{color: \"red\",value: \"#f00\"}]) > > where the "mycallback" is the name of the function you add to the DOM > which calls your handleJSONResponse method - without returning a > function from your servlet, I'm not sure how your handle method is > being called. > > Also, are you defining your callback code to pick up the parameter, > e.g. > > public native static void setup(YourHandlerClass h, String callback) / > *-{ > window[callback] = function(someData) { > [EMAIL PROTECTED]::handleJSONResponse(Lcom/ > google/gwt/core/client/JavaScriptObject;)(someData); > } > }-*/; > > without the (Lcom/google/gwt/core/client/JavaScriptObject;)(someData) > part it won't pick up the returned data > > //Adam > > On 7 Okt, 10:14, eggsy84 <[EMAIL PROTECTED]> wrote: > > > Hi Adam, > > > Thank you for the reply it definately helps! when you say it needs to > > be well-formed javascript I have implemented a method that performs > > the following: > > > /* (non-Javadoc) > > * @see > > javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, > > javax.servlet.http.HttpServletResponse) > > */ > > @Override > > protected void doPost(HttpServletRequest req, HttpServletResponse > > resp) throws ServletException, IOException > > { > > String output ="[{color: \"red\",value: \"#f00\"}]"; > > resp.setContentType("text/javascript"); > > resp.addHeader("Pragma", "no-cache"); > > resp.setStatus(200); > > PrintWriter out = resp.getWriter(); > > out.println(output); > > > } > > > Would that be sufficient? Well I ask the question but I assume not as > > with my implementation I successfully go back to my client handle > > method now but the JavascriptObject passed in is always null. > > > My client side handle method is very basic as a test (shown below) and > > I can confirm that when the claa is complete is definately hits this > > method so the glue between is wrong somehow? > > > public void handleJsonResponse(JavaScriptObject jso) > > { > > if (jso == null) > > { > > Window.alert("Unable to parse JSON"); > > return; > > } > > else > > { > > Window.alert("Well done Woohoo!!"); > > } > > > } > > > eggsy > > > On Oct 6, 9:28 pm, Adam T <[EMAIL PROTECTED]> wrote: > > > > Eggsy, > > > > To get it to work you need to get the plumbing right, and it's not > > > quite the same way as calling from code - btw, the example on that > > > page is aimed at client side not server side. The server is any > > > language you want as long as it returns a well-formed JavaScript > > > segment of the form: > > > > mycallback({....some json content....}) > > > > So your servlet would work as long as it returns something like the > > > above. > > > > In this approach you don't call the servlet in the normal way from the > > > program code, rather it gets called as a consequence of adding a > > > <script> tag to the DOM - this is what the addScript() method in the > > > example code does. Once the script is added to the DOM the browser > > > accesses the defined url of your service and expects a response. As > > > the response is a JavaScript function, it will get evaluated in the > > > browser. > > > > If you also define a function in the DOM with the same name you expect > > > back in the server response, e.g. mycallback, and that function calls > > > the GWT handle() function then the loop is closed. The example code > > > adds such a function using the setUp() method. > > > > The example code reserves a new function name for each "call" made to > > > the server, adds that new function to the DOM and then the <script> > > > tag. > > > > Where things usually go wrong are if the server returns a function > > > name not set up, or the response is not a valid javascript expression. > > > > Hope that helps in some small way! > > > > //Adam > > > > this then gets evaluated in the browser > > > > On 6 Okt, 17:02, eggsy84 <[EMAIL PROTECTED]> wrote: > > > > > Hi all, > > > > > Taking the informative article by Dan Morrill at GWT > > > > > Link:http://code.google.com/support/bin/answer.py?answer=65632&topic=11368 > > > > > It explains how to code for Server side mashups so that you can > > > > perform cross site JSONP calls. > > > > > In the article he uses the handle method (Shown below) to handle the > > > > return from the server side: > > > > > public void handle(JavaScriptObject jso) { > > > > JSONObject json = new JSONObject(jso); > > > > JSONArray ary = > > > > json.get("feed").isObject().get("entry").isArray(); > > > > for (int i = 0; i < ary.size(); ++i) { > > > > RootPanel.get().add(new > > > > Label(ary.get(i).isObject().get("title").isObject().get("$t").toString())); > > > > } > > > > } > > > > > I have tried writing my own basic Java Servlet GET/POST we all know > > > > the score and I can successfully call into my servlet but I never get > > > > back to my client side, in this case after the servlet has done its > > > > stuff, I never go back to the handle method to perform some whizz bang > > > > GWT stuff - is there something specific you are required to do on the > > > > server side? Such as extends RemoteServiceServlet as you would do in a > > > > normal GWT AsyncCallback call? Anyone got any ideas? > > > > > Thanks all > > > > > eggsy --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group. To post to this group, send email to Google-Web-Toolkit@googlegroups.com 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 -~----------~----~----~----~------~----~------~--~---