私は 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 コードでは、テスト アクションにポリゴンを送信します。 . 関数の最後に $("#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);
?>
以下はクロム開発者ツールの保存機能です!
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 が Null です。