GWT查询第二次失败-仅限

GWT查询第二次失败-仅限,gwt,google-visualization,Gwt,Google Visualization,嗨 我在GWT中有一个可视化功能,它调用相同面板的两个实例——两个查询。现在,假设一个url是A,另一个url是B。在这里,我面临一个问题,如果首先调用A,那么A和B都可以工作。如果先调用B,那么只有B工作,A超时。如果我两次都打A,只有第一次A工作,第二次A超时。如果我给B打两次电话,它两次都能正常工作 即使错误出现在超时时,它实际上并不是超时-在FF状态栏中,它显示直到-从A传输数据,然后它被卡住。这甚至不会在第一次查询中显示 A和B之间的唯一区别是B返回的速度非常快,而A返回的速度相对较慢

我在GWT中有一个可视化功能,它调用相同面板的两个实例——两个查询。现在,假设一个url是A,另一个url是B。在这里,我面临一个问题,如果首先调用A,那么A和B都可以工作。如果先调用B,那么只有B工作,A超时。如果我两次都打A,只有第一次A工作,第二次A超时。如果我给B打两次电话,它两次都能正常工作

即使错误出现在超时时,它实际上并不是超时-在FF状态栏中,它显示直到-从A传输数据,然后它被卡住。这甚至不会在第一次查询中显示

A和B之间的唯一区别是B返回的速度非常快,而A返回的速度相对较慢

示例代码如下所示:

public Panel(){
    Runnable onLoadCallback = new Runnable() {
       public void run() {
          Query query = Query.create(dataUrl);
          query.setTimeout(60);
          query.send(new Callback() {
          public void onResponse(QueryResponse response) {
                  if (response.isError()){
                       Window.alert(response.getMessage());
                  }
              }
           }
      }
      VisualizationUtils.loadVisualizationApi(onLoadCallback, PieChart.PACKAGE);
 }
这可能是什么原因?我想不出为什么会这样?为什么这只发生在A身上而不是B身上

编辑:更多的研究

一直有效的查询(即B是GWT可视化站点中给出的示例URL:参见注释[1])。因此,我尝试在我的应用程序引擎中复制它-以下方式

    s = "google.visualization.Query.setResponse({version:'0.6',status:'ok',sig:'106459472',table:{cols:[{id:'A',label:'Source',type:'string',pattern:''},{id:'B',label:'Percent',type:'number',pattern:'#0.01%'}],rows:[{c:[{v:'Oil'},{v:0.37,f:'37.00%'}]},{c:[{v:'Coal'},{v:0.25,f:'25.00%'}]},{c:[{v:'Natural Gas'},{v:0.23,f:'23.00%'}]},{c:[{v:'Nuclear'},{v:0.06,f:'6.00%'}]},{c:[{v:'Biomass'},{v:0.04,f:'4.00%'}]},{c:[{v:'Hydro'},{v:0.03,f:'3.00%'}]},{c:[{v:'Solar Heat'},{v:0.005,f:'0.50%'}]},{c:[{v:'Wind'},{v:0.003,f:'0.30%'}]},{c:[{v:'Geothermal'},{v:0.002,f:'0.20%'}]},{c:[{v:'Biofuels'},{v:0.002,f:'0.20%'}]},{c:[{v:'Solar photovoltaic'},{v:4.0E-4,f:'0.04%'}]}]}});";
    response =  HttpResponse(s, content_type="text/plain; charset=utf-8")
    response['Expires'] = time.strftime('%a, %d %b %Y %H:%M:%S GMT', time.gmtime())
    return response
其中s是我们运行B查询时的数据。我也尝试添加Expires等,因为这似乎是唯一有差异的头,但现在,查询一直失败

更多信息-我现在发送我的服务器响应与工作服务器响应之间的差异。他们看起来很相似

HTTP/1.0 200 OK
Content-Type: text/plain
Date: Wed, 16 Jun 2010 11:07:12 GMT
Server: Google Frontend
Cache-Control: private, x-gzip-ok=""

google.visualization.Query.setResponse({version:'0.6',status:'ok',sig:'106459472',table:{cols:[{id:'A',label:'Source',type:'string',pattern:''},{id:'B',label:'Percent',type:'number',pattern:'#0.01%'}],rows:[{c:[{v:'Oil'},{v:0.37,f:'37.00%'}]},{c:[{v:'Coal'},{v:0.25,f:'25.00%'}]},{c:[{v:'Natural Gas'},{v:0.23,f:'23.00%'}]},{c:[{v:'Nuclear'},{v:0.06,f:'6.00%'}]},{c:[{v:'Biomass'},{v:0.04,f:'4.00%'}]},{c:[{v:'Hydro'},{v:0.03,f:'3.00%'}]},{c:[{v:'Solar Heat'},{v:0.005,f:'0.50%'}]},{c:[{v:'Wind'},{v:0.003,f:'0.30%'}]},{c:[{v:'Geothermal'},{v:0.002,f:'0.20%'}]},{c:[{v:'Biofuels'},{v:0.002,f:'0.20%'}]},{c:[{v:'Solar photovoltaic'},{v:4.0E-4,f:'0.04%'}]}]}});Connection closed by foreign host.


Mac$ telnet spreadsheets.google.com 80
Trying 209.85.231.100...
Connected to spreadsheets.l.google.com.
Escape character is '^]'.
GET http://spreadsheets.google.com/tq?key=pWiorx-0l9mwIuwX5CbEALA&range=A1:B12&gid=0&headers=-1
HTTP/1.0 200 OK
Content-Type: text/plain; charset=UTF-8
Date: Wed, 16 Jun 2010 11:07:58 GMT
Expires: Wed, 16 Jun 2010 11:07:58 GMT
Cache-Control: private, max-age=0
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Server: GSE

google.visualization.Query.setResponse({version:'0.6',status:'ok',sig:'106459472',table:{cols:[{id:'A',label:'Source',type:'string',pattern:''},{id:'B',label:'Percent',type:'number',pattern:'#0.01%'}],rows:[{c:[{v:'Oil'},{v:0.37,f:'37.00%'}]},{c:[{v:'Coal'},{v:0.25,f:'25.00%'}]},{c:[{v:'Natural Gas'},{v:0.23,f:'23.00%'}]},{c:[{v:'Nuclear'},{v:0.06,f:'6.00%'}]},{c:[{v:'Biomass'},{v:0.04,f:'4.00%'}]},{c:[{v:'Hydro'},{v:0.03,f:'3.00%'}]},{c:[{v:'Solar Heat'},{v:0.005,f:'0.50%'}]},{c:[{v:'Wind'},{v:0.003,f:'0.30%'}]},{c:[{v:'Geothermal'},{v:0.002,f:'0.20%'}]},{c:[{v:'Biofuels'},{v:0.002,f:'0.20%'}]},{c:[{v:'Solar photovoltaic'},{v:4.0E-4,f:'0.04%'}]}]}});Connection closed by foreign host.
另外,请注意,应用程序引擎不允许通过Expires标题-这可能是原因吗?但如果这是原因,那么如果先发送B,然后发送A,则不会失败


评论[1]:

这个问题已经解决。这个错误的原因是google QueryResponse函数期望在同一个会话中的每个查询的response reqId都会增加——我在任何地方都没有看到文档。一旦reqId增加,它就开始正常工作