2010-06-07 153 views
2

我是新的gwt和新的使用Firebug。我的gwt版本是2.0.0。使用eclipse和WAMP。我的IIS停止运行WAMP apache。我在Firefox
运行我的节目,我有有效的JSON结果从位于“http://localhost/phpmyadmin/tesdb3/datauser.phpjson解析器空结果

{"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" /> 

tesdb3.php然后我试图说明它在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); 
+0

你可以通过代理运行请求,或使用萤火虫,告诉我们确切的反应是什么? – tgdavies 2010-06-07 13:04:40

+0

您是否为您的JSON输出设置了正确的标题? 'header('Content-type:application/json; charset = UTF-8');'那么其他状态类型呢?就像404s或500s“通过”还是导致状态码0? – 2010-06-07 13:18:07

+0

@tdavies:他已经发布了来自Firebug的Net标签的结果。 – 2010-06-07 13:19:02

回答

0

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

0

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

+0

请考虑将意见,而不是回答 – user1211929 2012-11-23 09:10:47

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请求。