Hi Adam Thank you for this insight - I'll use Dans code for my client side to fix this and add the callback as a parameter!
Thank you for all your help! I'll let you know how I get on Regards, On Oct 7, 1:03 pm, Adam T <[EMAIL PROTECTED]> wrote: > mmm, your code below doesn't really follow the pattern in the link of > your first post - however, I think I know why your handle method is > calling. The code below seems to use a timer to loop around checking > if something has been returned, if not it fires your handler with null > - which explains why you handler is called and you only see null. I > assume that if you add the method name to your response you would > eventually get your handler called with a value. > > I might misunderstand the code on the web site you link to, but I > personally would recommend using the code shown in Dan's article > (http://code.google.com/support/bin/answer.py? > answer=65632&topic=11368 ) for the client side. It works fine, > removes the need for a timer (which is going to take resource in your > application) and truly handles the asynchronous nature of the web. > > //Adam > > On 7 Okt, 13:46, eggsy84 <[EMAIL PROTECTED]> wrote: > > > 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 -~----------~----~----~----~------~----~------~--~---