0

JsHelper を使用して、cakePHP ビューのコード ブロックを使用して、cakePHP でうまく動作しないこの jQuery Ajax Request を書き直したいと思います。これまでのところ、すべてをセットアップしました(コントローラーにヘルパーを含め、レイアウトにバッファーを記述し、ライブラリー(jQuery)を含めました)が、これを書き直す方法がわかりません:

         $.ajax
            ({
                url: 'clients/loadJsonMarkers',
                accepts: 'json',
                type: 'POST',
                data: postData,
                dataType: 'json',
                error: function(xhr,status,err){
                    alert("DEBUG: status"+status+" \nError:"+err);
                },  
                success: function(transport)
                {   

                    var markers = new Array();

                    for(var i in transport.clients)
                    {
                        var latlng = transport.clients[i].Client.geoloc.replace("(", "");
                        latlng = latlng.replace(")", "");
                        latlng = latlng.split(',');

                        //console.debug(latlng);
                        markers.push(new google.maps.LatLng(parseFloat(latlng[0]),parseFloat(latlng[1])));
                    }

                    loadMap(markers);

                }
            });

これまでに書いたことは次のとおりです。

    $this->Js->get('document');
    $this->Js->event('load',
            $this->Js->request(
                array('action' => 'loadJsonMarkers'),
                array('assync'=>TRUE, 'type'=>'json', 'method'=>'POST', 'data'=>$_POST)
                ),
            array('success'=>$this->Html->scriptBlock("
                    function(transport)
                    {   
                        var markers = new Array();

                        for(var i in transport.clients)
                        {
                            var latlng = transport.clients[i].Client.geoloc.replace('(', '');
                            latlng = latlng.replace('(', '');
                            latlng = latlng.split(',');

                            //console.debug(latlng);
                            markers.push(new google.maps.LatLng(parseFloat(latlng[0]),parseFloat(latlng[1])));
                        }

                        loadMap(markers);

                    }"
            ))
    );

しかし、何かが足りないような気がして、このセレクター (ドキュメント) を使用する必要があるかどうかわかりません。

4

1 に答える 1

0

Cake$(document).ready()はすべてをバッファリングして関数に配置するため、バッファに追加するだけで済みます。

$request = $this->Js->request(
  array('action' => 'loadJsonMarkers'),
  array(
    'async' => true, 
    'type' => 'json', 
    'method' => 'POST', 
    'data' => $_POST,
    'wrapCallbacks' => false,
    'success' => "function(transport) {
      var markers = new Array();

      for(var i in transport.clients) {
        var latlng = transport.clients[i].Client.geoloc.replace('(', '');
        latlng = latlng.replace('(', '');
        latlng = latlng.split(',');

        markers.push(new google.maps.LatLng(parseFloat(latlng[0]),parseFloat(latlng[1])));
      }
      loadMap(markers);
    }"
  )  
);
$this->Js->buffer($request);

レイアウトにバッファーを書き込んでいることを確認してください。

しかし、JsHelper はCakePHP 3.0 で削除される可能性が高いため、純粋な JS 書き込みを既に取得しているため、おそらくそれをバッファリングする必要があります。

于 2013-01-25T01:19:39.377 に答える