我正在尝试将坐标值从视图传递到从地理位置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
时,变量是空白的。可能是错误的?也许是因为我在加载视图之前调用了帖子?
是否存在将数据传递给控制器的另一种方式?
答案 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