Saturday, April 25, 2015

Cake PHP 3.0 Ajax JSON

I am trying to implement a search module by using AJAX.

There is an index.ctp file in my Items Controller and I have linked my index.ctp file of Items to my search.ctp file which is present under Items controller as below:

For the search.ctp pages the URL displayed is : http://onlineelectronic.com/Items/search

In my search.ctp file the code is as follows:

<head>



   
<title> Search Results</title>

   
<?php echo $this->Html->script('//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js', array('inline' => false));?>

   
<script type="text/javascript">

        $
(document).ready(function() {

            $
("#Submit1").click(function () {

                alert
('here');

                $
.ajax({

                    type
: 'post',

                    url
: "/Items/search",

                    data
: {

                        name
: search

                   
},

                    beforeSend
: function(){

                        $
("#resultField").html("Loading...");

                   
},

                    success
: function (result) {

                        jQuery
('#resultField').html(result.valueOf($search));

                   
},

                    error
: function (response, error) {

                        alert
("Search :Error"+error);

                   
},

                    dataType
: 'json',

                    global
: false

               
});

           
});

       
});

   
</script>

</head>

<div>

   
<?= $this->Form->create() ?>

   
<fieldset>

   
<legend><?= __('Search Item') ?></legend>

   
<?php

    echo $this
->Form->input('search',['label'=>'Search']);

   
?>

   
</fieldset>

   
<?=$this->Form->submit('Search Items',['id'=>'Submit1']); ?>

   
<?= $this->Form->end() ?>

</div>

<fieldset>

   
<div id="resultField">

   
</div>  
</fieldset>


So my ItemsController code is as follows:
 
class ItemsController extends AppController
{




   
public $helpers = ['Form', 'Html', 'Time'];


   
public function initialize()
   
{
        parent
::initialize();
        $this
->loadComponent('RequestHandler');
   
}


   
public function search(){
   
//dummy
   
}


   
/**
     *obtains search result for a given string.
     */

   
public function searchData()
   
{
       
        echo
"here";
        $search_data
=[];
        var_dump
($search_data);
       
//$search_results = [];
       
if ($this->request->is('post')) {
            $search_data
= $this->request->data;
            $search_data
=implode("|",$search_data);
            $search_results
= $this->Items->find('all', array('conditions'=>array('Items.itemName LIKE'=>"%$search_data%")));
           
if(!empty($search_results)) {
                $this
->set(compact($search_results));
                $this
->set('_serialize',array('search_results'));
                echo json_encode
($search_results);
           
}
       
}


   
}

   
public function beforeFilter(Event $event)
   
{
        parent
::beforeFilter($event);

        $this
->Auth->allow(['index', 'view','search','searchData']);

   
}
}


What i have observed is that form tries to call action method search() from Items Controller so I included a dummy method in controller with no code.
But when the submit button is clicked only the alert comes up and then the page is no more responsive.

--
Like Us on FaceBook https://www.facebook.com/CakePHP
Find us on Twitter http://twitter.com/CakePHP

---
You received this message because you are subscribed to the Google Groups "CakePHP" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cake-php+unsubscribe@googlegroups.com.
To post to this group, send email to cake-php@googlegroups.com.
Visit this group at http://groups.google.com/group/cake-php.
For more options, visit https://groups.google.com/d/optout.

No comments: