Witam
Poniżej opiszę sytację nad którą mam problem. Moim problemem jest rozmieszczenie funkcji które są wywoływane poprzez AJAX
Załóżmy taka sytuację.
Mam pewien kontoller a w nim metode add($name)
Moj_Controller extends Controller { public function add($name){ //jest tuutaj ladowany model Moj_Model //nastepnie wywoluje metode add Moj_Model $this->Moj_Model->add($name); //teraz laduje widok ze wszystkimi elementami $this->load->view('jakis_widok'); } }
Moj_Model extends Model { public function add($name){ //dodaje element o name=$name } }
Moj_Controller extends Controller { public function add($name){ //jest tuutaj ladowany model Moj_Model //nastepnie wywoluje metode add Moj_Model $this->Moj_Model->add($name); //teraz laduje widok ze wszystkimi elementami $this->load->view('jakis_widok'); } public function ajax_add($name) { $this->Moj_Model->ajax_add($name); }
Albo dwie osobne metody, albo osobne widoki wybierane na podstawie typu żądania.
Raczej coś takiego:
Moj_Controller extends Controller { public function ajax_add($name) { $this->Moj_Model->add($name); } public function add($name){ $this->ajax_add($name); $this->load->view('jakis_widok'); } }
miałem na myśli stworzenie nowych metod w modelu i controllerze a nie stworzeniu nowego, osobnego modelu.
edit: źle wczytałem się w Twój przykład
Moj_Controller extends Controller { public function ajax_add($name) { $this->Moj_Model->add($name); } public function add($name){ $this->ajax_add($name); $this->load->view('jakis_widok'); } }
Nie wiem czy dobrze zrozumiałem problem, ale może coś takiego?
public function add($name){ if( http://www.php.net/isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && http://www.php.net/strtolower( $_SERVER['HTTP_X_REQUESTED_WITH'] ) == 'xmlhttprequest') { // jeśli żądanie AJAX $this->Moj_Model->add($name); } $this->load->view('jakis_widok'); }
Pytanie po co ajax ma ładować widok, po jego detekcji robisz exit, ewentualnie wysyłasz json.
Tak jak wyżej:
public function add($name) { if( http://www.php.net/isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && http://www.php.net/strtolower( $_SERVER['HTTP_X_REQUESTED_WITH'] ) == 'xmlhttprequest') { // jeśli żądanie AJAX $this->Moj_Model->add($name); // lub tu jak musisz zwracasz dane w json_encode http://www.php.net/exit; } $this->load->view('jakis_widok'); }
@up
chyba w przypadku gdy żądanie nie będzie AJAXowe element się nie doda. ?
czyli pomysł #luq jest poprawny i najlepszy?
Moim zdaniem nie. Skoro dane przesyłane z przeglądarki za pomocą ajaxa nie różnią się od tych pochodzących z synchronicznego żądania to kontroler ma dokładnie to samo zadanie i wykonuje je w ten sam sposób. Powinien wykonać operacje na modelu i przekazać go do widoku. Jeden model, jeden kontroler, dwa widoki.
hmm już sam nie wiem.
Mój cel:
Gdy wywołam skrypt synchronicznie, chcę aby element został usunięty i wyświetlony widok.
Gdy wywołam skrypt asynchronicznie, chcę aby element został usunięty, zwrócona informacja o nim i wyświetlony widok.
class controller { public function addAction() { $this->_add(); $this->view->ok = 'ok';... } public function addajaxAction() { if($this->_add([dane])) { return ajax_success(); } else { return ajax_error(); } } protected function _add() { [mielenie] } }
public function add($name) { $this->Moj_Model->add($name); if( ajax) { $this->load->view('jakis_widok_ajax'); } else { $this->load->view('jakis_widok'); } }
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)