json解析器空结果

时间:2010-06-07 09:42:40

标签: php json gwt

我是gwt的新手,也是使用Firebug的新手。我的gwt版本是2.0.0。使用eclipse和WAMP。我的IIS停止运行WAMP apache。我在firefox上运行我的程序 我有来自tesdb3.php的有效json结果,位于“http://localhost/phpmyadmin/tesdb3/datauser.php

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

我用

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

然后我尝试使用此代码在gwt中显示它。

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

我在开发模式下运行它。不是托管模式 我的代码没有显示任何错误。但是窗口警报的结果是“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

我的问题是:

为什么响应状态代码为0,响应状态文本为“OK”?在json或Java代码中没有错误。

为什么response.getText为空?为什么即使单个字符也无法获得任何json结果?

请帮帮我。已经2个月了,我尝试用很多源类型来解决这个问题,但我无法得到一个结果。

这是我的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);

3 个答案:

答案 0 :(得分:1)

我知道这是一篇旧帖子,但我打算向目前遇到此问题的所有人发布答案。

此问题的原因是SOP(同源策略)。这个问题源于PHP脚本与GWT或JavaScript Web应用程序不在同一个域中。

解决方案非常简单,只需在PHP脚本中添加一个新标题,如下所示:

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

这将告诉GWT php脚本运行的域(站点)接受来自任何其他域(站点)的请求。

要限制对给定网站的请求,只需添加以下标头:

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

来自http://mysite.com的java脚本发出http请求。

答案 1 :(得分:0)

好吧,看起来问题是SOP(同源策略)和跨站点请求。从我得到的(不详细)如果请求是跨站点,则不能使用RequestBuilder。
对于交换,使用getJson()和JSNI覆盖类型。本教程中的所有示例:http://code.google.com/webtoolkit/doc/latest/tutorial/Xsite.html。我将价格值更改为我的数据库值。最后......我的数据库显示在我的浏览器中(是啊!是啊!(T-T))。

答案 2 :(得分:0)

我有同样的问题。我们试图做的不应该是SOP问题,因为两个页面都在同一台计算机上。问题在于我们在测试网络时eclipse的执行情况。要解决此问题,请将war文件夹复制到htdocs并使用Internet Explorer运行它,您将检查您的代码是否正确。有可能在eclipse中配置运行,但我不知道如何。