2010-06-07 10 views
2

Je suis nouveau dans gwt et nouveau à l'utilisation de Firebug. Ma version de gwt est 2.0.0. en utilisant éclipse et WAMP. mon IIS est arrêté pour exécuter WAMP apache. J'exécuter mon programme sur Firefox
J'ai résultat JSON valide à partir tesdb3.php situé dans « http://localhost/phpmyadmin/tesdb3/datauser.php »json parser vide resultat

{"item": [{"kode":"002","nama":"bambang gentolet"}, 
      {"kode":"012","nama":"Algiz"}]} 

-je ajouter le code XML avec

<inherits name='com.google.gwt.json.JSON'/> 
<inherits name="com.google.gwt.http.HTTP" /> 

alors je tente de le montrer dans le GWT avec ce code.

public class Tesdb3 implements EntryPoint { 

String url= "http://localhost/phpmyadmin/tesdb3/datauser.php"; 

public void LoadData() throws RequestException{    

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

    builder.sendRequest(null, new RequestCallback(){ 
     @Override 
     public void onError(Request request, Throwable exception) { 
      Window.alert("error " + exception); 
     } 
     public void onResponseReceived(Request request, 
       Response response) { 
       if (200 == response.getStatusCode()) { 
        Window.alert("ok -" + response.getText() + "-" + response.getStatusCode()); 
       } else { 
        Window.alert("error2 -" + response.getText()+ response.getStatusText() + "-" + response.getStatusCode()); 
       }   
     } 
    }); 
} 

public void onModuleLoad() {   
    try { 
     LoadData(); 
    } catch (RequestException e) { 
     e.printStackTrace(); 
    }  
} 
} 

Je l'exécute en mode développement. mode non hébergé.
Mon code n'a montré aucune erreur. Mais le résultat dans l'alerte de fenêtre est "error2 --OK-0".

result Net from firebug is 7 request: 
get Tesdb3.html?gwt.codeserv = 200ok 
get Tesdb3.css = 200ok 
get tesdb3.nocache.js = 200ok 
get hosted.html?tesdb3 = aborted 
get standard.css = 304 not modified 
get hosted.html?tesdb3 = 403 not modified 
get datauser.php = 200ok 

Ma question est:

Pourquoi le code d'état de réponse est 0, et le texte d'état de réponse est 'OK'? il n'y avait pas d'erreur dans json ou le code Java.

Pourquoi response.getText est vide? Pourquoi je ne peux pas obtenir de résultat JSON même un seul personnage?

Aidez-moi s'il vous plaît. déjà 2 mois j'essaye de résoudre ceci avec beaucoup de type de source et je ne peux pas obtenir un résultat simple.

Ceci est mon datauser.php

header('Content-type: application/json; charset=UTF-8'); 
    header('Cache-Control: no-cache'); 
    header('Pragma: no-cache'); 

    $link = mysql_connect("localhost", "root", "") 
     or die("Could not connect : " . mysql_error()); 
    mysql_select_db("tesku1") or die("Could not select database" . mysql_error()); 

    $query = "select * from tabel1"; 
    $result = mysql_query($query); 

    $jumlah_data = mysql_num_rows($result); 

    echo '['; 

    for ($i=0; $i<=count($result); $i++){ 
     $row = mysql_fetch_array($result); 

     echo '{'; 
     echo "\"kode\":\"$row[kode]\","; 
     echo "\"nama\":\"$row[nama]\""; 

     if ($i==count($result)){ 
     echo '}'; 
     }else 
     echo '},'; 
    } 
    echo ']'; 

    mysql_free_result($result); 
+0

Pouvez-vous exécuter la requête via un proxy ou utiliser firebug pour nous dire exactement quelle est la réponse? – tgdavies

+0

Définissez-vous les en-têtes appropriés pour votre sortie JSON? 'header ('Content-type: application/json; jeu de caractères = UTF-8');' Et qu'en est-il des autres types de statuts? Par exemple, est-ce que les 404 ou les 500 «passent» ou entraînent également le code d'état 0? –

+0

@tdavies: Il a déjà publié les résultats de l'onglet Net depuis Firebug. –

Répondre

0

Eh bien, on dirait que le problème est SOP (même politique d'origine), et demande intersite. De ce que je reçois (pas détaillé cependant) si la demande est inter-site, RequestBuilder ne peut pas être utilisé.
Pour l'échange, utilisez les types de superposition getJson() et JSNI. Tous les exemples de ce tutoriel: http://code.google.com/webtoolkit/doc/latest/tutorial/Xsite.html. Je change la valeur du prix en valeur de base de données. À la fin .. ma base de données apparaissant dans mon navigateur (ouais! Yeahhh! (T-T)).

0

J'ai le même problème. Ce que nous essayons de faire ne devrait pas être un problème SOP parce que les deux pages sont dans le même ordinateur. Le problème concerne l'exécution que fait Eclipse lorsque nous testons le Web. Pour résoudre le problème, copiez le dossier war dans htdocs et lancez-le en utilisant votre explorateur internet et vous vérifierez que votre code est correct. Il y a la possibilité de configurer la course en eclipse, mais je ne sais pas encore comment.

+0

S'il vous plaît considérez mettre des commentaires dans les commentaires au lieu des réponses – user1211929

1

Je sais que c'est un vieux message, mais j'ai l'intention de poster une réponse à tous ceux qui ont ce problème actuellement.

La cause de ce problème est SOP (même règle d'origine). Ce problème provient du fait que le script PHP n'est pas dans le même domaine que votre application Web GWT ou JavaScript.

La solution est assez simple il suffit d'ajouter un nouvel en-tête à votre script PHP comme ceci:

header('Access-Control-Allow-Origin: *'); 

ceci indiquera GWT que le domaine (site) où le script PHP exécute accepte les demandes de tout autre domaine (des sites).

Pour limiter la demande à un site donné il suffit d'ajouter l'en-tête suivant:

header('Access-Control-Allow-Origin: http://mysite.com'); 

Lorsqu'un script java de http://mysite.com fait la demande http.