Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在GWT中翻译、使用JSON?_Gwt - Fatal编程技术网

如何在GWT中翻译、使用JSON?

如何在GWT中翻译、使用JSON?,gwt,Gwt,我是gwt的新手。需要知道如何在gwt中使用JSON,所以我尝试了这个简单的数据加载器,但我仍然感到困惑。 我在eclipse中创建了一个名为“tesdb3”的项目。我创建了PHP端来访问数据库,并将输出作为JSON。。我在war文件夹中创建userdata.php。然后我编译tesdb3项目。文件夹tesdb3和war中的userdata.php被移动到本地服务器,我使用WAMP。我把PHP放在文件夹tesdb3中。这是我的localhost/phpmyadmin/tesdb3/userdat

我是gwt的新手。需要知道如何在gwt中使用JSON,所以我尝试了这个简单的数据加载器,但我仍然感到困惑。 我在eclipse中创建了一个名为“tesdb3”的项目。我创建了PHP端来访问数据库,并将输出作为JSON。。我在war文件夹中创建userdata.php。然后我编译tesdb3项目。文件夹tesdb3和war中的userdata.php被移动到本地服务器,我使用WAMP。我把PHP放在文件夹tesdb3中。这是我的localhost/phpmyadmin/tesdb3/userdata.php的结果

[{"kode":"002","nama":"bambang gentolet"}{"kode":"012","nama":"Algiz"}]
从这个结果来看,我认为PHP端工作得很好。然后我将UserData.java创建为JSNI覆盖,如下所示:

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();
      }
}
最后在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();
        }
    }
}
我在onResponseReceived中使用的两种方法的结果是相同的。只是显示我的数据。但是方法2创建eror如下: 14:41:59.875[错误][tesdb3]未捕获异常已转义 com.google.gwt.core.client.JavaScriptException:语法错误


我错过了使用第二种方法吗?为什么方法1没有任何eror但无法显示数据?

它看起来像是代码中的一个输入错误,这让我想到了命名约定:对于变量和方法,使用驼峰大小写,从小写字符开始。因此,UserData UD应该是UserData UD

在getuserdata方法(应该是getuserdata)中,使用参数名Json和大写字母J,在本机代码Json中使用小写字母J。这就是错误的原因

关于getUserData方法。有一个GWT方法:JsonUtils.unsafeEvaljson,您应该使用它

此外,onResponseReceived中的代码似乎不完整,它可能不重要,因为它可能被错误地放在本例中,但为了完整起见,它应该是这样的:

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

问题是您的JSON语法不正确,表的第一项后缺少逗号,应添加空格以便于阅读:

[
    {
        "kode": "002",
        "nama": "bambang gentolet" 
    },
    {
        "kode": "012",
        "nama": "Algiz" 
    }
]
由于JSON是JavaScript的一部分,因此可能会出现语法错误异常


PS:我建议使用一些PHP框架为您创建JSON,Zend框架是我通常的选择。此外,JSON验证器(如)对于调试JSON非常有用。

谢谢。我创建了新的有效Json格式。但结果是一样的。xml或类似的东西中有继承吗?有,但如果您使用JavaScript覆盖类型,我不确定您是否需要它。对于HTTP内容,可以使用POST,但您可能已经有了它。如果浏览器出现异常,你能用Firebug或类似的工具检查一下吗?我试着用Firebug。firebug并没有发现任何错误或类似的东西。你有加载数据库的例子吗?我不知道该怎么做了,我看不出你的代码还有什么问题——你必须检查JSON的整个路径,从服务器到浏览器再到GWT。使用Firebug,查看Net选项卡,检查响应是否确实有效,是否具有有效的响应类型,然后在调试会话中运行GWT应用程序,并检查所有关键内容—您得到的响应对象,等等。