如何在GWT中翻译、使用JSON?
我是gwt的新手。需要知道如何在gwt中使用JSON,所以我尝试了这个简单的数据加载器,但我仍然感到困惑。 我在eclipse中创建了一个名为“tesdb3”的项目。我创建了PHP端来访问数据库,并将输出作为JSON。。我在war文件夹中创建userdata.php。然后我编译tesdb3项目。文件夹tesdb3和war中的userdata.php被移动到本地服务器,我使用WAMP。我把PHP放在文件夹tesdb3中。这是我的localhost/phpmyadmin/tesdb3/userdata.php的结果如何在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
[{"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应用程序,并检查所有关键内容—您得到的响应对象,等等。