我使用 yii 框架来创建地图应用程序。在这个应用程序中,我使用 GeoExt 和 Openlayers。在这个应用程序中,用户可以绘制多边形并保存它以在用户绘制多边形并单击它后实现这一点(OpenLayers 功能)我使用 ajax 发送多边形以保存在数据库上,但我无法从 yii 框架中的控制器操作中获取任何 ajax 数据。请参见下面的代码!
var selectOptions = {
clickout: true,
onSelect: save
};
select = new OpenLayers.Control.SelectFeature(vectors, selectOptions);
map.addControl(select);
var saveButton = new Ext.Button({
text: 'Save',
enableToggle: true,
toggleGroup: toggleGroup,
handler: function(toggled)
{
if(toggled){
polygon.deactivate();
modify.deactivate();
select.activate();
}
}
function save(feature) {
var geojson_format = new OpenLayers.Format.GeoJSON();
var str = geojson_format.write(feature, true);
Ext.MessageBox.prompt('Name', 'Please enter district name:', "Ok");
<?php
echo CHtml::ajax(array(
'url'=>array('site/test'),
'data'=>array('polygon'=>'data'),
'type'=>'POST',
'success'=>"function(){
alert('ok');
}"
));
?>
$("#output").val(str);
}
在保存功能中,我使用 yii Chtml::ajax 将多边形发送到 Yii 站点控制器测试操作在这个 php 代码中我发送带有“数据”的多边形进行测试,但实际上我想发送 str 变量,即多边形 geojson 对象到控制器操作. 在函数结束时,我使用 $("#output").val(str); 为了测试geojson str var,我在输出文本区域中看到了输出,但我不知道为什么数据没有发送到控制器操作!控制器动作代码
class SiteController extends Controller
{
public $polygon;
public function actionTest()
{
if(isset($_POST['polygon']))
$this->polygon=$_POST['polygon'];
$this->render("test", array('polygon'=>$this->polygon));
}
为了测试功能,我在地图中创建了一个多边形并在切换此按钮后单击保存按钮我单击创建的多边形我在输出文本区域中看到多边形 geojson 对象但是当我想在浏览器中查看多边形对象时http://localhost/FleetManagement/index.php/site/test
我只看到 Null !!测试视图代码:
<?php
var_dump($polygon);
?>
下面是chrome开发者工具中的保存功能!
function save(feature) {
var geojson_format = new OpenLayers.Format.GeoJSON();
var str = geojson_format.write(feature, true);
Ext.MessageBox.prompt('Name', 'Please enter district name:', "Ok");
jQuery.ajax({'url':'/FleetManagement/index.php/site/test','data':{'polygon':'data'},'type':'POST','cache':false}); $("#output").val(str);
}
当我调试时,我看到 JQuery.ajax 行执行,但我不知道该行是否可以发送数据!因为当我看到测试视图时,我只看到 Null!在上面的代码中,我可以看到成功警报,但在测试视图中看不到站点控制器多边形,并且 $polygon 为空!