通过post方法将坐标从视图传递到控制器

时间:2012-02-20 19:59:13

标签: php javascript codeigniter

我正在尝试将坐标值从视图传递到从地理位置google api获取的控制器add,但我遇到了一些麻烦。这是我在名为_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 :(得分:0)

您需要更改此行:

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

到此:

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

当然,有一种方法可以对猫进行换肤,因为我相信有一种jQuery方法可以将JSON序列化为正确的POST变量字符串格式,但我在这里肯定会有效。

答案 1 :(得分:0)

您没有将$ latitude传递给视图,因此您无法访问它。

如果您要加载新页面,则$ latitude需要位于传递给视图的$ data数组中。

但是,您正在使用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

在Chrome或Firebug中发出Ajax请求时,请确保“网络”面板已打开,以便您确认它正在找到您的控制器。

答案 2 :(得分:0)

控制器文件:

$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