繁体   English   中英

CakePHP控制器中的JavaScript

[英]JavaScript in CakePHP's controller

在我的CakePHP视图中,我使用jQuery调用控制器中的方法:

function placeSensors(nk) {
  $.ajax({
    type:'post', 
    url:'/myapp/maps/placeSensors/' + nk, 
    success: function(r) {
      if(r.status = 'ok') {
      }
    }
  });
}

控制器中的JS定义为:

class MapsController extends AppController {
  var $name = 'Maps';
  var $helpers = array('Js');
  var $uses = array('Measurings', 'Maps');
  var $components = array('RequestHandler'); // added later, but still the same


function index( $id = null, $value = null ) {
$code = '';
?>
<script type="text/javascript">
  alert('Hello!');
</script>
<?php
return $code;
}

因此,使用简单的代码,我无法在我的网络表单上收到警报消息。 我在其他一些项目中使用的代码非常简单,它在那里工作,并且由于某些原因,这不适用于这个...

我真的很困惑这个,你能帮帮我吗.....

更新:这是我通过Firebug得到的回应:

<script type="text/javascript">
  alert('Hello!');
</script>

您正试图在控制器内放置应由客户端查看(javascript)的代码。 控制器用于业务逻辑,客户端看不到。

将您的javascript放在/ webroot / js /目录中的javascript文件中。

要与ajax交互,请告诉控制器使用RequestHandler组件来确定它们是否被ajax调用。 从那里你可以返回简单的值,或返回一个json或xml视图。

如果这听起来很复杂,那么现在就不用担心它,只需要根据需要开始,然后慢慢构建应用程序。

function placeSensors(nk) {
 $.ajax({
   type:'post', 
    dataType:'json',
   url:'/myapp/maps/placeSensors/' + nk, 
   success: function(r) {
     if(r.status) {
          alert(r.code);
     }
   }
 });
}

       class MapsController extends AppController {
           var $name = 'Maps';
            var $helpers = array('Js');
              var $uses = array('Measurings', 'Maps');


        function index( $id = null, $value = null ) {


             }

        // update below code
      function placeSensors( ) {
                $nk = $_POST['nk'];
              echo json_encode(array(
            'status' => true,
            'code' => "code"                
            ));
       exit();  

             }

好的,我终于解决了这个问题。

我只需要在表单上添加一个表单和一个文本,甚至更好的隐藏元素。

之后一切都开始起作用了。

所以我提到的代码还可以,我只需要一个文本框.........希望有人可以告诉我为什么?

感谢您的所有帮助和支持。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM