2014-09-20 3 views
0

Я удаляю запись с помощью jquery в cakephp.Itries следующий код, но он не дает мне фактического вывода. Он удаляет запись, когда я обновляю страницу. Когда я нажимаю ссылку на удаление, она дает мне всплывающее сообщение. удалите запись.Как удалить запись с jquery в cakephp?

https://gist.github.com/taleeb35/e61f58af9944511b1669

Это моя суть коды.

public function delete($id = null) { 
    if($this->request->is('ajax')) { 
    //$this->autoRender = false; 
    if ($this->User->delete($id)) { 
     $response = $this->Session->setFlash(__('User deleted')); 
     $response .= $this->redirect(array('action' => 'index')); 
    } else { 
     $response = $this->Session->setFlash(__('User was not deleted')); 
     $response.= $this->redirect(array('action' => 'index')); 
    } 
    return json_encode($response); 
    } 
} 


$(document).ready(function() { 
    $('a.delete').click(function(e) { 
     var __this = this; 
     e.preventDefault(); 
     var parent = $(this).parent("td").parent("tr"); 
     $.ajax({ 
      type: 'get', 
      url: $(__this).attr("href"), 
      beforeSend: function() { 
       parent.animate({'backgroundColor':'#fb6c6c'},3000); 
      }, 
      success: function(response) { 
       if(response.success){ 
        parent.slideUp(300,function() { 
         parent.remove(); 
        }); 
       }else{ 
        alert("Failed to delete message"); 
        parent.animate({'backgroundColor':'#fff'},1000);//Restore your background back 
       } 
      } 
     }); 
    }); 
}); 
+0

Похоже, вы просто придерживаться вещи вместе, не зная, на самом деле, что вы делаете, и я настоятельно рекомендую вам изучить документы первой. Ни 'setFlash()' not 'redirect()' ничего не возвращает, также 'redirect()', конечно, вызовет перенаправление, в результате чего результат действия индекса будет возвращен в запрос AJAX. – ndm

ответ

0

Вы должны сделать пару вещей в своем действии. Во-первых, разорвать линию с автозапуска. Это действие только ajax, поэтому вам не нужно ничего выводить, и даже просмотр файла не требуется. Во-вторых, макет, должен быть установлен в null или ajax-friendly. Последнее - ответ и способ их возвращения. Вы используете die() insetad return, и будет лучше, если ваш ответ будет массивом со всей информацией, необходимой вам в вашем js-скрипте. Таким образом, ваше действие может выглядеть следующим образом:

public function delete($id = null) { 
    if ($this->request->is('ajax')) { 
     $this->autoRender = false; 
     $this->layout = null; 

     $response = array(); 

     if ($this->User->delete($id)) { 
      $response['success'] = false; 
      $response['message'] = __('User deleted'); 
      $response['redirect'] = Router::url(array('action' => 'index')); 
     } else { 
      $response['success'] = true; 
      $response['message'] = __('User was not deleted'); 
      $response['redirect'] = Router::url(array('action' => 'index')); 
     } 

     echo json_encode($response); 
    } 

    die(); 
} 

Второе, что нужно сделать, это добавить тип данных, возвращаемых вызовом ajax. Вы также можете разобрать ответ внутри обратного вызова success.

dataType: 'json' 

или (в успех обратного вызова)

response = JSON.parse(response); 
+0

Спасибо за вашу помощь. Моя функция удаления фактически обновляет (редактирует, а не удалять) некоторые записи в таблице. В это время tr удаляется из экрана. Когда я обновляю страницу tr, возвращается с результатом обновления. Теперь я хочу, как показать обновленную запись без обновления страницы, а также tr не следует удалять со страницы. –

+0

, а также как отображать подтверждение при обновлении записи? –

Смежные вопросы