【问题标题】:Cakephp how to make ajax request with jsHelperCakephp 如何使用 jsHelper 发出 ajax 请求
【发布时间】:2013-01-25 09:19:39
【问题描述】:

我想使用 JsHelper 在我的 cakePHP 视图中使用代码块重写此 jQuery Ajax 请求,该请求不适用于 cakePHP。 到目前为止,我已经设置了所有东西(在我的控制器中包含了帮助程序,在我的布局中写入了缓冲区,包含了我的库(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);

                    }"
            ))
    );

但我觉得缺少一些东西,我不知道我是否应该使用这个选择器(文档)。

【问题讨论】:

  • 既然已经有了,为什么不把它写成普通的 JS 呢?在 CakePHP 3.0 中它是 likely it will be removed
  • 伙计,我试过了。我发誓,这是一次盲目的尝试,是让这件事发挥作用的绝望尝试。这是我的第一个问题,我的 JS 代码不起作用:stackoverflow.com/questions/14486895/…

标签: ajax cakephp cakephp-2.1


【解决方案1】:

由于 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);

确保在布局中写入缓冲区。

但是,由于您已经编写了纯 JS,您可能应该只是缓冲它,因为 JsHelper 将 likely be removed in CakePHP 3.0

【讨论】:

  • 老兄,感谢您的帮助,但它仍然无法正常工作。代码已执行,我可以在调试中看到,但应用程序中没有任何反应,甚至我的地图也没有绘制。
  • 你不会相信的,但是在 5 天后试图发现这段代码到底发生了什么,我明白了,这是我的观点有问题,我应该删除所有内容那是在 里面,我不知道为什么,但它现在可以工作了。
  • 只是让您知道,我发现我的 css 有问题,并通过此页面上的提示解决了我的问题:stackoverflow.com/questions/9548330/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-27
  • 1970-01-01
  • 2012-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多