передача координат от вида к контроллеру через почтовый метод - PullRequest
1 голос
/ 20 февраля 2012

Я пытаюсь передать значения координат из вида в контроллер add, взятый из геолокации google api, но у меня возникли некоторые проблемы. Хорошо, это сценарий, который я использую в представлении с именем _add. сценарии работают, потому что консоль JavaScript хорошо распечатывает координаты.

 <script type="text/javascript">

        $(document).ready(function(){
            get_location();
        });

        function get_location()
        {
            if(navigator.geolocation)
            {
                navigator.geolocation.getCurrentPosition(function(position){

                        var latitude = position.coords.latitude;
                        var longitude = position.coords.longitude;

                        $.post('http://firstaid:8888/add', { latitude:latitude, longitude:longitude });

                });
            }
        }

    </script>

Теперь я передаю значения из этих представлений в контроллер таким образом, чтобы их можно было использовать в качестве переменной в контроллере php codeigniter. Для этого я использую $this->input->post.

function index()
{
    $data['title'] = 'Add';

    $latitude = $this->input->post('latitude');

    $this->load->view('templates/_header', $data);
    $this->load->view('_add');

}

Но когда я распечатываю $latitude, переменная пуста. Где может быть ошибка? может, потому что я вызываю почту перед загрузкой просмотров?

Существует ли другой способ передачи данных в контроллер?

Ответы [ 3 ]

0 голосов
/ 21 февраля 2012

Вы не передаете $ latitude в представление, поэтому вы не можете получить к нему доступ.

Если вы загружаете новую страницу, $ latitude должен быть в массиве $ data, который передается вview.

Однако вы используете Ajax, поэтому вы не можете загрузить новое представление таким образом.Вам нужно сделать что-то вроде:

$latitude = $this->input->post('latitude');
echo json_encode( $latitude );

Затем обработайте ответ в своем Javascript.

Или просто используйте print_r непосредственно в контроллере, чтобы убедиться, что переменная есть.

print_r($this->input->post('latitude'));

Попробуйте это в своем Javascript:

$.ajax({
     type: "POST",
     url: "/add",
     data: "latitude=" + latitude,
     dataType: "json",
     success: function(msg){
         alert('Completed');
     } //End success condition
 }); //End ajax

При выполнении запроса Ajax в Chrome или Firebug убедитесь, что панель «Сеть» открыта, чтобы вы могли убедиться, что она находит ваш контроллер.

0 голосов
/ 29 сентября 2016

файл контроллера:

$this->load->library('googlemaps');

$config['center'] = '37.4419, -122.1419';
$config['zoom'] = 'auto';
$this->googlemaps->initialize($config);

$marker = array();
$marker['position'] = '37.429, -122.1419';
$marker['draggable'] = true;
$marker['ondragend'] = 'updateDatabase(event.latLng.lat(), event.latLng.lng());';
$this->googlemaps->add_marker($marker);
$data['map'] = $this->googlemaps->create_map();

$this->load->view('view_file', $data);

просмотреть файл:

<html>
<head>
    <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        function updateDatabase(newLat, newLng)
        {
            // make an ajax request to a PHP file
            // on our site that will update the database
            // pass in our lat/lng as parameters
            $.post(
                "/my_controller/update_coords", 
                { 'newLat': newLat, 'newLng': newLng, 'var1': 'value1' }
            )
            .done(function(data) {
                alert("Database updated");
            });
        }
    </script>
    <?php echo $map['js']; ?>
</head>
<body><?php echo $map['html']; ?></body>
</html>

ссылка: http://biostall.com/demos/google-maps-v3-api-codeigniter-library/updatedatabase

0 голосов
/ 21 февраля 2012

Вам необходимо изменить эту строку:

$.post('http://firstaid:8888/add', { latitude:latitude, longitude:longitude });

к этому:

$.post('http://firstaid:8888/add', 'latitude='+latitude+'&longitude='+longitude);

Конечно, существует несколько способов сделать скин для кошки, так как я считаю, что есть метод jQuery, который может сериализовать JSON для правильного формата строки переменной POST, но то, что у меня здесь есть, наверняка сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...