2012-06-20 6 views
6

Sto provando a fare la richiesta Cross Site utilizzando il builder GWT Request, che non riuscivo ancora a far funzionare. Come puoi vedere, questo è un esempio di un progetto GWT di esempio e ho attraversato https://developers.google.com/web-toolkit/doc/latest/tutorial/Xsite. Ma mi manca ancora qualcosa.GWT RequestBuilder - Cross Site Requests

Sto inviando il codice qui. Cosa mi manca ..?

package com.gwt.reqbuilder.client; 

import com.google.gwt.core.client.EntryPoint; 
import com.google.gwt.http.client.Request; 
import com.google.gwt.http.client.RequestBuilder; 
import com.google.gwt.http.client.RequestCallback; 
import com.google.gwt.http.client.RequestException; 
import com.google.gwt.http.client.Response; 
import com.google.gwt.http.client.URL; 
import com.google.gwt.user.client.Window; 

public class GWTRequestBuilder implements EntryPoint 
{ 
    private static final String JSON_URL = "http://localhost:8000/?q=ABC&callback=callback125"; 
    public void onModuleLoad() 
    { 
     GWTPOSTHTTP(); 
    } 

    public void GWTPOSTHTTP() 
    { 
     String postUrl="http://localhost:8000"; 
     String requestData="q=ABC&callback=callback125"; 
     RequestBuilder builder = new RequestBuilder(RequestBuilder.POST, postUrl); 
     try { 
      builder.sendRequest(requestData.toString(), new RequestCallback() 
      { 
       public void onError(Request request, Throwable e) 
       { 
        Window.alert(e.getMessage()); 
       } 
       public void onResponseReceived(Request request, Response response) 
      { 
        if (200 == response.getStatusCode()) 
        { 
         Window.alert(response.getText()); 
        } else { 
         Window.alert("Received HTTP status code other than 200 : "+ response.getStatusText()); 
        } 
      } 
      }); 
     } catch (RequestException e) { 
      // Couldn't connect to server 
     Window.alert(e.getMessage()); 
     } 
    } 
} 

risposta

5

in realtà siamo in grado di effettuare richieste Cross Site da GWT RequestBuilder se siamo in grado di impostare in Servlet Response Header

Response.setHeader("Access-Control-Allow-Origin","http://myhttpserver"); 

Funziona Fico, se qualcuno ha bisogno del Progetto GWT e del Servlet Python, per favore fatemi sapere, posso caricare i file.

GWT Client Code : https://github.com/manikandaraj/MLabs/tree/master/GWT/GWTClient 
+0

Stavo cercando una soluzione come questa, non voglio usare JS nativo in GWT Java. [Scusa jonasr, mi piace molto questa idea di intestazione] –

3

Ti sei perso per finire di leggere il tutorial.

citazione diretta dal tutorial:

Il codice RequestBuilder è sostituito da una chiamata al metodo getJSON. Così non è più necessario il seguente codice nel metodo refreshWatchList:

 
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url); 

try { 
    Request request = builder.sendRequest(null, new RequestCallback() { 
    public void onError(Request request, Throwable exception) { 
     displayError("Couldn't retrieve JSON"); 
    } 

    public void onResponseReceived(Request request, Response response) { 
     if (200 == response.getStatusCode()) { 
     updateTable(asArrayOfStockData(response.getText())); 
     } else { 
      displayError("Couldn't retrieve JSON (" + response.getStatusText() 
      + ")"); 
     } 
    } 
    }); 
} catch (RequestException e) { 
    displayError("Couldn't retrieve JSON"); 
} 

che è ampiamente quello che hai, e dovrebbe essere sostituito da una funzione JSNI data nel tutorial poche righe di seguito:

 
    /** 
    * Make call to remote server. 
    */ 
    public native static void getJson(int requestId, String url, 
     StockWatcher handler) /*-{ 
    var callback = "callback" + requestId; 

    // [1] Create a script element. 
    var script = document.createElement("script"); 
    script.setAttribute("src", url+callback); 
    script.setAttribute("type", "text/javascript"); 

    // [2] Define the callback function on the window object. 
    window[callback] = function(jsonObj) { 
    // [3] 
    [email protected]::handleJsonResponse(Lcom/google/gwt/core/client/JavaScriptObject;)(jsonObj); 
    window[callback + "done"] = true; 
    } 

    ... 
+0

Provo la stessa cosa ma funzionerà per qualche collegamento e non per altri ha qualche idea? perché alcuni URL non mi rispondono. GWT ha una risposta di successo ma nella risposta di Firebug è vuoto. Potrebbe essere una cosa con il problema del server ?. –