Я использую структуру yii для создания картографического приложения. В этом приложении я использую GeoExt и Openlayers. В этом приложении пользователь может рисовать многоугольник и сохранять его для достижения этой цели после того, как пользователь нарисует многоугольник и щелкнет по нему (функция OpenLayers). Я отправляю многоугольник с помощью ajax для сохранения. это в базе данных, но я не могу получить какие-либо данные ajax из действия контроллера в структуре yii. См. код ниже!
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));
}
Для тестирования функциональности я создаю многоугольник на карте и нажимаю кнопку «Сохранить» после того, как эта кнопка переключается. Я нажимаю на созданный многоугольник. Я вижу объект 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 имеет значение Null!
1 ответ
Я считаю, что ваш код, вероятно, работает - добавление var_dump ($ _ POST) в actionTest () было бы хорошим местом для начала.
Поскольку вы выполняете вызов AJAX, $ this-> render () не возвращается в браузер так, как вы ожидаете. Я предполагаю, что на вкладке «Инструменты разработчика Chrome», затем на вкладке «Ответ» вы увидите «данные».
В общем, чтобы вернуть данные, вам нужно что-то вроде:
public function actionTest()
{
if(isset($_POST['polygon']))
$polygon = $_POST['polygon'];
else
$polygon = NULL;
echo CJSON::encode(array('polygon'=>$polygon));
}
Чтобы получить доступ к возвращенным данным, вы можете использовать обратный вызов в своем AJAX, например. :
<?php
echo CHtml::ajax(array(
'url'=>array('site/test'),
'data'=>array('polygon'=>'data'),
'type'=>'POST',
'dataType': 'json',
'success' : "function(data) { console.log(data.polygon) }",
));
?>
Это будет записывать значение многоугольника в консоль. . . измените функцию успеха, чтобы вывести ее в более полезное место.
Ваш текущий метод звучит так, как будто он не работает, поскольку вы обращаетесь к site/test
прямо в браузере через адресную строку, а это означает, что в $ _POST ничего не будет.
site/test
, вы не выполните POST, поэтому значение будет NULL.
Похожие вопросы
Новые вопросы
jquery
jQuery — это библиотека JavaScript. Также рассмотрите возможность добавления тега JavaScript. jQuery — это популярная кросс-браузерная библиотека JavaScript, которая упрощает обход объектной модели документа (DOM), обработку событий, анимацию и взаимодействие AJAX, сводя к минимуму расхождения между браузерами. Вопрос с тегом jQuery должен быть связан с jQuery, поэтому jQuery должен использоваться рассматриваемым кодом, и в вопросе должны быть как минимум элементы, связанные с использованием jQuery.