CakePHP Jquery.ajax () - PullRequest
       1

CakePHP Jquery.ajax ()

5 голосов
/ 01 сентября 2011

Ну, я новичок в CakePHP. Так что тяжелый день для отладки этого. Вот мой код:

templates_controller.php

    function reajax($id = NULL) {       
        $this->layout = false;
        $this->Template->id = $id;
        $template = $this->Template->read();
        $this->set('result', $template['Template']['content']);
    }

reajax.ctp

echo $result;

js файл

$(document).ready(function() {
       $(".abcd").click(function(event){
           event.preventDefault();
           var id = this.id;
           $.ajax({
               type:"GET",
               url:"/templates/reajax/" + id,
               success : function(data) {
                   alert('success');
                   $("textarea").text(data);
               },
               error : function() {
                   alert(id);
               },
           })
       });
})

Файл клика

    <ul class="content-box-tabs">
      <?php echo $html->link($html->image('thumbnails/'.$template['Template']['thumbnail'], array('alt' => 'test', 'height' => '120', 'width' => '110')), array('controller' => 'templates', 'action' => 'reajax'), array('class' => 'abcd', 'id' => $template['Template']['id'], 'escape' => false))?> 
    </ul>

Каждый раз, когда я получаю сообщение об ошибке, я понятия не имею, что не так с моим кодом. Может кто-нибудь мне помочь? Заранее спасибо.

Все идет хорошо, когда я редактирую файл JS ниже. Я не знаю, является ли это ошибкой CakePHP или что-то не так с моим кодом. Мне нужен человек-паук!

$(document).ready(function() {
           $(".abcd").click(function(event){
               event.preventDefault();
               var id = this.id;
               $.ajax({
                   type:"GET",
                   url:"/cakephp/templates/reajax/" + id,
                       //url: "/templates/reajax/" + id,
                   success : function(data) {
                       alert('success');
                       $("textarea").text(data);
                   },
                   error : function() {
                       alert(id);
                   },
               })
           });
    })

Ответы [ 4 ]

5 голосов
/ 02 сентября 2011

Причина, по которой вы всегда получаете ошибку, состоит в том, что вы никогда не возвращаете ответ от действия, например, вы должны выполнить эхо-запрос json, вы просто устанавливаете данные и все.

Выдолжна также иметь некоторую проверку в вашем методе контроллера, что произойдет, если шаблон с предоставленным идентификатором не существует?Вы получите ошибку и не обработаете ее.

2 голосов
/ 01 сентября 2011

не уверен насчет этой строки

$this->layout = false;

создайте новый пустой макет ajax.ctp как этот

<?=$content_for_layout?>

и попробуйте использовать его

$this->layout = 'ajax';

и.... вы можете попробовать использовать этот способ для ajax-запроса

$.get('/controller/action/'+Math.random(),{},function(data){
  $('#result').html(data);
});
0 голосов
/ 12 августа 2016

1. $this->autoRender = false; или $this->viewBuilder->layout('ajax'); (для Cakephp 3.0 и создайте ajax.ctp внутри папки макета) ajax.ctp должно выглядеть как

<?php
 echo $this->fetch('content') ;
 ?>

Вам не нужно делать это.cpt для функции ajax, потому что ajaxFunction может вернуть не значение html.

Затем вы можете проверить, является ли это запрос ajax или нет. (Это не обязательно для лучших практик)

if ($this->request->is('ajax')) {
    // do your logic here
}
Вы должны поместить echo $ result в функцию reajax.

Теперь ваш код должен выглядеть следующим образом

function reajax($id = NULL) {       
        $this->autoRender= false;
        $result = "Some value";
        echo $result;`enter code here`
    }

Это поможет вам.

0 голосов
/ 16 февраля 2015

прежде всего вы должны повторить свой результат, затем выйти из функции или сделать его autoRender = false;для отладки следует использовать инструмент разработчиков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...