Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> ZEND + AJAX
raval
post
Post #1





Grupa: Zarejestrowani
Postów: 100
Pomógł: 0
Dołączył: 1.04.2011

Ostrzeżenie: (0%)
-----


Witam,

Mam problem z ajax'em w ZF. Przy odświeżeniu strony otrzymuje następujący błąd:

  1. POST <a href="http://127.0.0.1/my_app/ajax/main_contact" target="_blank">http://127.0.0.1/my_app/ajax/main_contact</a> 404 Not Found 2.45s


poniżej kod:

Akcja ajax:

  1. public function ajaxAction(){
  2. try{
  3.  
  4. if ($this->getRequest()->isXmlHttpRequest())
  5. {
  6. switch($this->_getParam('param1'))
  7. {
  8. case 'main_contact': $contacts = new $this->_db_table_contact;
  9. $getContacts = $contacts->getContacts($this->getRequest()->getPost('category_id'));
  10. $jsonObjectWithExpression = Zend_Json::encode(array("post_content" => $getContacts->post_content));
  11. echo $jsonObjectWithExpression;
  12.  
  13. break;
  14. }
  15.  
  16. } else {
  17. throw new Exception ("Invalid action. Not post");
  18. }
  19. } catch (Exception $e) {
  20. echo $e->getMessage();
  21. }
  22.  
  23. }


js:

  1. $.ajax({
  2. type: "POST",
  3. url: "<?php echo $this->baseUrl; ?>/ajax/main_contact",
  4. data: "category_id=" + cat,
  5. dataType: "json",
  6.  
  7. success: function(data){
  8. $('div.pl-contacts').html(data.post_content);
  9. },
  10. error: function(data){
  11. alert( "Wystąpił błąd: \n" + data.post_content );
  12. }
  13. });


Już męcze się z tym drugi dzień i nie wiem co może być tego przyczyną.
Uprzejmie prosze o pomoc.
Go to the top of the page
+Quote Post
CuteOne
post
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

Ostrzeżenie: (0%)
-----


1. Akcja main_contact nie istnieje
2. Widok dla tej akcji nie istnieje

Odpal http://127.0.0.1/my_app/ajax/main_contact z adresu przeglądarki i sam sprawdź

Ten post edytował CuteOne 16.11.2012, 14:30:25
Go to the top of the page
+Quote Post
raval
post
Post #3





Grupa: Zarejestrowani
Postów: 100
Pomógł: 0
Dołączył: 1.04.2011

Ostrzeżenie: (0%)
-----


Cytat(CuteOne @ 16.11.2012, 14:29:34 ) *
1. Akcja main_contact nie istnieje
2. Widok dla tej akcji nie istnieje

Odpal http://127.0.0.1/my_app/ajax/main_contact z adresu przeglądarki i sam sprawdź


main_contact to parametr akcji ajax:

  1.  
  2. resources.router.routes.ajax.route = "ajax/:param1"
  3. resources.router.routes.ajax.defaults.controller = "index"
  4. resources.router.routes.ajax.defaults.action = "ajax"
  5. resources.router.routes.ajax.defaults.param1 = 0
  6. resources.router.routes.ajax.reqs.param1 = "\w+"


Akcja i widok 'ajax' jak najbardziej istnieje. Dane są prawidłowo przetwarzane, oraz są zwracane Json'em (podgląd w firebug):

  1. {"post_content":"<table style=\"width: 530px;\" border=\"0\" align=\"left\">\r\n<tbody>\r\n<tr id=\"main_contact_table\">\r\n<td id=\"row\"><span style=\"font-size: 10px;\">......<\/td>\r\n<\/tr>\r\n<\/tbody>\r\n<\/table>"}


Stąd nie rozumiem problemu.

Ten post edytował raval 16.11.2012, 15:04:27
Go to the top of the page
+Quote Post
cudny
post
Post #4





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

Ostrzeżenie: (0%)
-----


W takim wypadku my_app jest kontrolerem - nie używaj "_" ani w akcjach ani w kontrolerach, znak jest zarezerwowany dla path separator.
Spróbuj dać myappController, problem powinien zniknąć


--------------------
..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
Go to the top of the page
+Quote Post
raval
post
Post #5





Grupa: Zarejestrowani
Postów: 100
Pomógł: 0
Dołączył: 1.04.2011

Ostrzeżenie: (0%)
-----


my_app to nic innego jak folder w którym znajduje sie projekt. Kontroler nazywa się index i ustawiony tak , aby nie był wyświetlany w odnośniku.
Go to the top of the page
+Quote Post
cudny
post
Post #6





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

Ostrzeżenie: (0%)
-----


A baseUrl masz ustawiony na my_app ?


--------------------
..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
Go to the top of the page
+Quote Post
raval
post
Post #7





Grupa: Zarejestrowani
Postów: 100
Pomógł: 0
Dołączył: 1.04.2011

Ostrzeżenie: (0%)
-----


Myślę, że definiowanie zmiennej w index.php robi swoje:

  1. defined('APPLICATION_PATH')|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/application'));


Odpowiedź jest, że mam. Nigdy wcześniej nie bawiłem się ajaxem w projektach ZF, może trzeba jakoś ustawić jeszcze callback? :X

Ten post edytował raval 17.11.2012, 16:36:24
Go to the top of the page
+Quote Post
cudny
post
Post #8





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

Ostrzeżenie: (0%)
-----


Ajax do zenda nic nie ma.
Zobacz czy masz w bootstrap ustawione setBaseUrl('my_app');


--------------------
..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
Go to the top of the page
+Quote Post
raval
post
Post #9





Grupa: Zarejestrowani
Postów: 100
Pomógł: 0
Dołączył: 1.04.2011

Ostrzeżenie: (0%)
-----


Witam po weekendzie.

Cytat(cudny @ 17.11.2012, 16:41:52 ) *
Ajax do zenda nic nie ma.
Zobacz czy masz w bootstrap ustawione setBaseUrl('my_app');


Niestety nie dało to żadnego rezultatu.

Zauważyłem w firebugu, że w nagłówku żądania pozycja Referer jest ustawiona na: http://127.0.0.1/my_app/ , a nie jak chyba być powinno: http://127.0.0.1/my_app/ajax/main_contact



Czyżby w tym tkwił problem questionmark.gif Jeżeli tak, to jak go ustawic poprawnie ?
Go to the top of the page
+Quote Post
cudny
post
Post #10





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

Ostrzeżenie: (0%)
-----


Raval, nie jestem w stanie zdebugować twojego kodu, musisz to zrobić sam.
W kontrolerze do którego się odnosisz w init daj, nie wiem...
  1. echo 'exists'; die;
to na początek, zobacz czy wchodzi w ogóle w kontroller.
Zobacz co ci wyświetla
  1. console.log("<?php echo $this->baseUrl; ?>/ajax/main_contact")
i takie tam.
Wtedy będziesz wiedział w czym jest błąd. Trzeba debugować, debugować debugować


--------------------
..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
Go to the top of the page
+Quote Post
raval
post
Post #11





Grupa: Zarejestrowani
Postów: 100
Pomógł: 0
Dołączył: 1.04.2011

Ostrzeżenie: (0%)
-----


Tak jest.. uczono mie po wsze czasy, aby debugować, debugować i debugować.. tak też i robie, bynajmniej staram się wink.gif
Dlatego co uznam za odkryte przeze mnie, staram się tutaj przedstawić i zapytać, czy ide w dobrym kierunku.

Jeżeli chodzi o sama stronę, to kontlolery i akcje działaja bez zarzutów. Problem pojawił mi sie jedynie przy wykorzystaniu ajaxa, wiem, że nie ma on nic wspolnego z ZF, aczkolwiek odnosze wrażenie jakby przy jego wywołaniu "gubił" (jeżeli mogę to tak nazwac) adres powrotny :X Stąd jestem już cały zielony i nie wiem co robie źle, albo czego jeszcze nie zrobiłem :X

  1. console.log("<?php echo $this->baseUrl; ?>/ajax/main_contact")


wyświetla: /my_app/ajax/main_contact

  1. echo 'exists'; die;


wykonuje sie praiwdłowo, czyli samo exists.
Go to the top of the page
+Quote Post
cudny
post
Post #12





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

Ostrzeżenie: (0%)
-----


Rozumiem, że exists widzisz w konsoli ? Bo coś mi się nie wydaje tongue.gif
url dla ajaxa powinien raczej wyglądać: my_app/ajax/main_contact a nie /my_app/ajax/main_contact

Ja baseUrl zawsze sobie ustawiam w jakiejś klasie javascript i potem się do tego odnoszę, aby nie walić zawsze <?php echo $this->baseUrl; ?>.
Moja rada, daj sobie gdzieś na początku var baseUrl = '<?php echo $this->baseUrl.'/'; ?>'; Powinno zadziałać smile.gif

Z tym że możesz jeszcze dać trim($this->baseUrl,'/');

Ten post edytował cudny 19.11.2012, 10:59:29


--------------------
..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
Go to the top of the page
+Quote Post
raval
post
Post #13





Grupa: Zarejestrowani
Postów: 100
Pomógł: 0
Dołączył: 1.04.2011

Ostrzeżenie: (0%)
-----


Zdaje się, że rozwiązałem problem. Tak jak myślałem, wszystko zależało od prawidłowej implementacji w ZF.
Poniżej zamieszczam fragment kodu, jaki powinien znajdowac się w Akcji AJAX.

  1. $this->getResponse()
  2. ->setHttpResponseCode(200)
  3. ->setBody($jsonObjectWithExpression)
  4. ->setHeader('Content-Type', 'text/json');


Dzięki wszystkim za pomoc i pozdrawiam wink.gif

PS.
Cytat(cudny @ 19.11.2012, 10:41:04 ) *
Rozumiem, że exists widzisz w konsoli ? Bo coś mi się nie wydaje tongue.gif


Broń Panie w żadnej konsoli tongue.gif

Ten post edytował raval 19.11.2012, 12:17:57
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 15:33