CakePHP Ajax удалить

Я пытаюсь удалить данные cakephp с помощью ajax. Здесь я изменил кнопку постссылки на простую кнопку html, например

<button class="del" id=<?php echo $user['User']['id']; ?>>Delete </delete>

Вот теперь я могу получить идентификатор пользователя с помощью кода ниже

$('document').ready(function(){
        $('.del').click(function(){
            var x=$(this).attr("id");
            alert(x);
        });
    });

Я успешно получил идентификатор пользователя. Теперь я пытаюсь отправить его для usercontroller в действии удаления. Итак, я закодировал как

$('document').ready(function(){
        $('.del').click(function(){
            var x=$(this).attr("id");
            alert(x);
            jQuery.get("<?php echo $this->webroot . $this->params["users"]; ?>/delete",{"id":x},function(data,stat){
                                 jQuery("#success").load("success.ctp");
            });
        });
    });

Теперь в контроллере в действии удаления я пробовал

public function delete($id=NUll) {
        $id=$_GET['id'];
        $this->User->id = $id;
        if ($this->User->delete()) {
            $this->Session->setFlash(__('The user has been deleted.'));
        } 
        return $this->redirect(array('action' => 'index'));
    }

Здесь это не работает. В контроллере, как я могу это определить?


person Alimon Karim    schedule 28.10.2014    source источник
comment
Что ВАШ БРАУЗЕР генерирует jQuery.get("<?php echo $this->webroot . $this->params["users"]; ?>/delete",{"id":x},function(data,stat){ jQuery("#success").load("success.ctp"); }); как HTML?   -  person Pratik    schedule 29.10.2014


Ответы (3)


Если вы используете перед фильтром,

function beforeFilter()
{
    //Here set Which pages should be accessable to various users
    $adminPages =array('delete');
    $this->Auth->allow($adminPages);

    ...... 
}

Разрешите его выполнение с помощью Auth allow.

Если это также работает нормально, проверьте правильность строки AJAX. Проверьте, используя РУЧНОЕ УДАЛЕНИЕ, например abc.com/Users/delete/id:2 Просто скопируйте и вставьте строку, которую вы получите в jQuery.get(). Удаляет нормально??

ЕСЛИ ВСЕ НЕ РАБОТАЕТ, ПОПРОБУЙТЕ следующее: :)

public function delete($id=NUll) {
    $id=$_GET['id'];
    $this->User->id = $id;
    if ($this->User->delete()) {
        $this->Session->setFlash(__('The user has been deleted.'));
    } 
    return $this->redirect(array('action' => 'index'));
}

И аякс:

        jQuery.get("<?php echo $this->webroot . $this->params["users"].'/delete/';?>"+x+"",{"id":x},function(data,stat){
                             jQuery("#success").load("success.ctp");
        });
person Pratik    schedule 29.10.2014

Здесь неверным был только URL, я изменил его, и теперь он работает нормально.

echo $this->webroot . $this->params["users"]; ?>/delete"

TO

echo Router::url(array('controller'=>'users','action'=>'delete'));?>"
person Alimon Karim    schedule 29.10.2014

попробуйте это, если хотите использовать ajax

   public function delete_user() {
        $this->autoRender = false;
        if ($this->request->data) {

        $this->User->id = $this->request->data['id'];
        $update = $this->User->saveField($this->request->data['field'], $this->request->data['value']);
        if ($update) {
            $repsonce['success'] = '1';
            $this->Session->setFlash(__d('User', 'User Deleted successfully'), 'default', array('class' => 'alert alert-success'));
        } else {
            $repsonce['success'] = '0';
        }
    } else {

        $repsonce['success'] = '0';
    }
    echo json_encode($repsonce);
}
person Ashish pathak    schedule 09.03.2015