JavaScript で取得したいくつかの引数をコントローラーのメソッドに渡す必要があるときに、AJAX/S2 に混乱しています。
私のスクリプトでは、ある時点で位置変数を取得します。
function handle_geolocation_query(position){
alert('Lat: ' + position.coords.latitude + ' ' +
'Lon: ' + position.coords.longitude);
$.when( getLakes(position.coords.latitude, position.coords.longitude)).done(function(result1) {
console.log(result1);
});
};
function getLakes(lat, long) {
return $.ajax({
url: "{{ path('getLakes') }}",
data: { lat:lat, lng: lng },
dataType: 'jsonp'
});
};
次に、ルーターをそのように設定します。
getLakes:
pattern: /lakes
defaults: { _controller: PondipGeolocBundle:Default:getLakesSurrounding }
そして、私のコントローラーでは、配列を返すことになっています:
public function getLakesSurrounding($lat=0, $lng=0, $limit = 50, $distance = 50, $unit = 'km')
{
$lat = $this->getRequest()->get('lat');
$lng = $this->getRequest()->get('lont');
$return= array( '1'=> array( 'title' => 'lake1',
'venue' => 'lake2',
'dist' => 'lake3',
'species' => 'lake4',
'stock' => 'lake4'),
'2'=> array( 'title' => 'lake1',
'venue' => 'lake2',
'dist' => 'lake3',
'species' => 'lake4',
'stock' => 'lake4'),
'3'=> array( 'title' => 'lake1',
'venue' => 'lake2',
'dist' => 'lake3',
'species' => 'lake4',
'stock' => 'lake4'),
'4'=> array( 'title' => 'lake1',
'venue' => 'lake2',
'dist' => 'lake3',
'species' => 'lake4',
'stock' => 'lake4'),
'5'=> array( 'title' => 'lake1',
'venue' => 'lake2',
'dist' => 'lake3',
'species' => 'lake4',
'stock' => 'lake4')
);
$return=json_encode($return); //jscon encode the array
return new Response($return,200,array('Content-Type'=>'application/json')); //make sure it has the correct content type
}
そして、それを別の関数に渡して、テンプレートを口ひげで設定してビューに印刷したいと思います(私はまだここにいません..)
私の質問は: 必要な緯度と経度のデータを関数に渡すことができません。ルーターがおかしくなり、コントローラーが何も得られず、そのスクリプトから何も得られません。編集:変数を渡す方法を見つけましたが、コントローラーから応答が得られず、何も起こらず、$.when はコールバックを実行しません。
私はAJAXにかなり慣れていないので、アドバイスしてください。