我将OL 2.11与GeoExt 1.1一起使用。在测试和修改此GeoExt示例后:http://geoext.org/lib/GeoExt/widgets/form/FormPanel.html,我在破坏和读取新协议时遇到了问题,我在firebug中得到了"TypeError:this.options is null HTTP.js(第180行)"。我从第180行了解到,(新协议中的)新选项不存在,不确定这是否是问题所在以及如何解决。这是原始协议(在FormPanel之外创建):
protocol = new OpenLayers.Protocol.HTTP({
url: '/fs/',
format: new OpenLayers.Format.GeoJSON({
ignoreExtraDims: true,
'internalProjection': new OpenLayers.Projection('EPSG:900913'),
'externalProjection': new OpenLayers.Projection('EPSG:4326')
})
});
这是创建新协议的FormPanel末尾的代码:
buttons: [{
text: 'Search',
handler: function() {
comboLayer = Ext.getCmp('idcombo').getValue();
keyword = Ext.getCmp('idtextfield').getRawValue();
protocol.destroy();
protocol = new OpenLayers.Protocol.HTTP({
url: '/fs/' + comboLayer + '?format=GeoJSON&comments__ilike=' + keyword + '&queryable=comments',
format: new OpenLayers.Format.GeoJSON({
ignoreExtraDims: true,
'internalProjection': new OpenLayers.Projection('EPSG:900913'),
'externalProjection': new OpenLayers.Projection('EPSG:4326')
})
});
protocol.read();
formPanel.search();
}
}]
在我删除"protocol.dedestroy();"的情况下,原始协议和新协议都会被发送,但总是在新协议之后发送原始协议,这是因为请求是AJAX?有可能在原件之后再寄新的吗?
我非常感谢对此的支持,提前感谢
解决方案是只使用"protocol.options.url=newUrl;"而不是protocol.destroy();或protocol.read();,完整的解释在这里