2012-06-20 23 views
6

Estoy tratando de hacer Cross Site Request usando GWT Request Builder, que no pude conseguir que funcione todavía. Como puede ver, esto es mucho más que un Proyecto de muestra GWT y he pasado por https://developers.google.com/web-toolkit/doc/latest/tutorial/Xsite. Pero aún me falta algo.GWT RequestBuilder - Cross Site Requests

Estoy publicando el código aquí. Qué me estoy perdiendo ..?

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()); 
     } 
    } 
} 

Respuesta

5

en realidad, podemos hacer peticiones Cruz del sitio de GWT RequestBuilder si podemos establecer en el encabezado de respuesta servlet

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

Funciona bien, si alguien necesita el Proyecto GWT y el Servlet de Python, por favor hágamelo saber, puedo cargar los archivos.

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

Estaba buscando una solución como esta, no quiero usar JS nativo en GWT Java. [Lo siento jonasr, realmente me gusta esta idea de encabezado] –

3

Te has perdido para terminar de leer el tutorial.

cita directa del tutorial:

El código RequestBuilder se sustituye por una llamada al método getJSON. Así ya no es necesario el código siguiente en el método 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"); 
} 

que es ampliamente lo que tienes, y debe ser reemplazada por una función JSNI dada en el tutorial unas líneas más abajo:

 
    /** 
    * 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

Intento lo mismo pero funcionará para algún enlace y no para algunos otros ¿Alguna idea? por qué algunas URL no me responden. GWT obtiene respuesta satisfactoria, pero en Firebug la respuesta está en blanco. Puede ser cualquier cosa con el problema del servidor ?. –

Cuestiones relacionadas