Joris Ooms
Joris Ooms

Reputation: 12038

CodeIgniter/jQuery - Ajax call returns full html page instead of my echo

In my view I have an ajax call:

    $(".previous").click(function() {
        $.ajax({
            type: "POST",
            url: "planner/get_cal",
            data: {current_month: current_month},
            success: function(msg){
                alert(msg);
            }

        });

the get_cal function in my Planner controller:

function get_cal()
{
    echo "dinosaurs";
}

However, instead of returning "dinosaurs", it returns a full HTML page. I can't figure out why. Thoughts? Thanks a lot.

Upvotes: 8

Views: 14795

Answers (8)

Ragul
Ragul

Reputation: 9

// Main Page view

$("#button").click(function(e)
{
  value=$("#input_value").val();

  $.ajax({
  type: "POST",
  url: "<?php echo base_url(); ?>path",
  data: "type=get_path_details&mobile="+value,
  cache: true,
  dataType:"html",
  async: false,
  success: function(data)
  {
  $('.apend_new_div').empty().append(data);
  $('.scroll_card').css('overflow-x','scroll');
  }
  });

});

// Controller

public function path()
{   
  $id = $this->input->post("mobile");
  // Some function goes here
  // $template[''] = ;
  $this->load->view('ajax_page',$template);
}

// ajax view page

<?php if($_POST['type']=='get_path_details'){if(!empty($template)){ ?>
// Html code 
<?php }} ?>

Upvotes: 0

Joris Ooms
Joris Ooms

Reputation: 12038

I solved this by using a leading slash as suggested in the comments to my question.

$.ajax({
  type: "POST",
  url: "/planner/get_cal",
  dataType: "text",
  data: {current_month: current_month},
  success: function(msg){
    alert(msg);
  } 
});         

Upvotes: 11

Maxim Safioulline
Maxim Safioulline

Reputation: 341

Just wanted to mention: the url will really depend on how you have your .htaccess and folder structure set-up. So the best way is to try several urls, i.e.:
../../controller/method
../controller/method
server_folder/index.php/controller/method
http://example.com/server_folder/index.php/controller/method
and then choose the one that works best in a given situation.

Upvotes: 0

altimus
altimus

Reputation: 23

For anyone that is using the Zend Framework, I was experiencing the same issues where the AJAX response was returning the full HTML instead of the json_encode() response. This was resolved by adding the following to my controller:

    if ($this->getRequest()->isXmlHttpRequest())
    {
        $this->_helper->layout()->disableLayout();
        $this->_helper->viewRenderer->setNoRender(true);
    }

Upvotes: 0

Rakesh Ray
Rakesh Ray

Reputation: 29

These type of problem come when your php file and html file are not on proper path so that apache server could parse php files. Without mentioning type:'text' and any other format also, ajax will work. But be sure that your server is reaching to php file. Otherwise whole file will be treated as text and returned.

Upvotes: 0

RiksAndroid
RiksAndroid

Reputation: 825

You can also get it by adding exit after echo in your php file like below:

function get_cal()
 {
    echo "dinosaurs";exit;
}

It will work. :)

Upvotes: 5

Peter
Peter

Reputation: 2306

When using the CodeIgniter structure of Controler/Method uri segments I've found it much easier to use ../../controller/method as my URL's in jquery ajax requests. I also recommend specifying a dataType so that the string is parsed and returned as an object.

Here is an example;


$.ajax({  
     type: "POST",  
     dataType: "json",  
     url: "../../controller/method",  
     success: mySuccessFunction  
}); 

Upvotes: 0

JHurrah
JHurrah

Reputation: 1988

Try setting the dataType to "text"


$.ajax({
  type: "POST",
  url: "planner/get_cal",
  data: {current_month: current_month},
  dataType: "text",
  success: function(msg){
      alert(msg);
  }
});

Upvotes: 0

Related Questions