2010-04-21 5 views
2

Je suis nouveau en gwt. et j'ai besoin de savoir comment utiliser JSON dans gwt donc j'essaye ce simple chargeur de données mais je suis toujours confuse.
Je crée un projet nommé 'tesdb3' dans eclipse. Je crée le côté PHP pour accéder à la base de données, et fait la sortie en JSON ..
Je crée le userdata.php dans le dossier guerre. alors je compile le projet tesdb3. Dossier tesdb3 et le userdata.php en guerre déplacé dans le serveur local (j'utilise WAMP). J'ai mis le PHP dans le dossier tesdb3. Ceci est le résultat de mon localhost/phpmyadmin/tesdb3/userdata.phpComment traduire, utiliser JSON dans GWT?

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

De ce résultat, je pense que le côté PHP fonctionnait bien.
Je crée ensuite UserData.java comme superposition JSNI comme ceci:

package com.tesdb3.client; 
import com.google.gwt.core.client.JavaScriptObject; 

class UserData extends JavaScriptObject{ 
     protected UserData() {} 

     public final native String getKode() /*-{ return this.kode; }-*/; 
     public final native String getNama() /*-{ return this.nama; }-*/; 

     public final String getFullData() { 
      return getKode() + ":" + getNama(); 
     } 
} 

finalement dans le tesdb3.java:

public class Tesdb3 implements EntryPoint { 

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

    private native JsArray<UserData> getuserdata(String json) 
    /*-{ 
     return eval(json); 
    }-*/; 

    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) {   
      //1               
          //data(getuserdata(response.getText())); 
          //2 
        JsArray<UserData> uda = JsonUtils.unsafeEval(response.getText()) 
           data(uda);  
      } 
     }); 
    } 

public void data(JsArray<UserData> data){ 
    for (int i = 0; i < data.length(); i++) { 
     String lkode =data.get(i).getKode(); 
     String lname =data.get(i).getNama();     

     Label l = new Label(lkode+" "+lname); 
     tb.setWidget(i, 0, l); 
     } 
    RootPanel.get().add(new HTML("my data")); 
    RootPanel.get().add(tb); 
} 

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

Le résultat à la fois méthode que je l'utilise dans le onResponseReceived est le même. Juste montrant la chaîne "mes données".
mais la méthode 2 créer eror comme ceci:
14: 41: 59,875 [ERREUR] [tesdb3] Uncaught exception échappé com.google.gwt.core.client.JavaScriptException: (SyntaxError): erreur de syntaxe

Ai-je manqué d'utiliser la 2ème méthode?
Pourquoi la méthode 1 n'a pas eu d'erreur mais ne peut pas afficher les données?

Répondre

2

Cela ressemble à une faute de frappe dans votre code, ce qui m'amène à des conventions de nommage: pour les variables et les méthodes, utilisez le cas chameau, en commençant par un caractère en minuscule. Ainsi UserData UD devrait être UserData ud.

Dans votre méthode getuserdata (qui devrait être getUserData) vous utilisez le nom du paramètre Json au capital J et dans le code natif json avec le bas j. Ceci explique l'erreur.

En ce qui concerne la méthode getUserData. Il existe une méthode GWT: JsonUtils.unsafeEval(json) que vous devez utiliser.

De plus, le code dans le onResponseReceived semble incomplète, il pourrait ne pas être d'une importance telle qu'elle pourrait être mal mis dans cet exemple, mais juste pour être complet, voici ce qu'il devrait ressembler à:

JsArray<UserData> uda = JsonUtils.unsafeEval(response.getText()); 

for (int i = 0; i < uda.length(); i++) { 
    UserData ud = uda.get(i); 
    String lKode = ud.getKode(); 
    String lName = ud.getNama();     
    Label l = new Label(lKode + " " +lName); 

    RootPanel.get().add(l); 
} 
+0

Je vais essayer votre exemple et modifier la question. merci – user315196

3

le problème est que votre JSON a une syntaxe incorrecte, il vous manque une virgule après le premier élément de la table, il faut (les espaces ajouté pour une meilleure lisibilité):

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

Depuis JSON est une partie de JavaScript ce pourrait être l'exception d'erreur de syntaxe vous obtenez. PS: Je recommande d'utiliser un framework PHP pour créer du JSON pour vous (Zend Framework est mon choix habituel). En outre, les valideurs JSON comme JSONLint sont très utiles pour le débogage de JSON.

+0

Merci. Je crée un nouveau format Json valide. Mais le résultat est le même. Y a-t-il des héritages dans le XML ou quelque chose comme ça? – user315196

+0

Il existe ' 'mais je ne suis pas sûr que vous en ayez besoin si vous utilisez JavaScript Overlay Types. Et '' pour les choses HTTP (GET, POST), mais vous avez probablement déjà celui-là. Pouvez-vous vérifier avec Firebug (ou un outil similaire) s'il y a une exception lancée dans le navigateur? –

+0

J'essaie d'utiliser firebug. il n'y avait pas d'erreur ou quelque chose comme ça pris dans firebug. Vous avez un exemple de chargement de la base de données? Je n'ai aucune idée quoi faire plus. – user315196

Questions connexes