Nikola Sivkov
Nikola Sivkov

Reputation: 2852

CodeIgniter AJAX bug returning same page

when i try to make AJAX request with jQuery as a response i get the html of the same page ! here is a live preview (edit not available due to me fixing it )

here are my files Edit : I have made changes to some of the files

main controller :

Class Main extends Controller {

function Main() 
{
      parent::Controller();   
}

function index(){

    $this->load->view('oxila_index');
}}

Oxila_index view ( just the JS rest of the html is in the link above )

 <script type="text/javascript">
        $(document).ready(function(){
            $("#inv").hide();
        });
        $(document).ready(function(){
            $("#submit").click(function(evt){

                $.post("/ajax/process", {
                    url: $("#url").val()
                }, function(response){
                        $("#output").html("");
                    $("#inv").show("slow"); 
                        $("#output").html(response);
                }, "text");
                evt.preventDefault();
            }); 
        });
    </script>

Ajax Controller

Class Ajax extends Controller {

    function process(){

        $data['url'] = $this->input->post('url');
        $this->load->view('test',$data);
        echo "hello world";
    }
}

Upvotes: 5

Views: 1932

Answers (5)

Nikola Sivkov
Nikola Sivkov

Reputation: 2852

This is what a person in the forums told me

you definitely have something in place. Every single path I type in after the url leads me to the home page.

Try changing your URL Protocol from AUTO to something else. (this can be found in the config/config.php file)

i changed it to “REQUEST_URI” and it works !

Upvotes: 1

Donny Kurnia
Donny Kurnia

Reputation: 5313

I just tried your page, and it work well. FYI, I use google chrome in Linux.

I have a few notes though. First, move the script from <head> to the bottom of the page, above </body>. This is best practice, since loading js code will block concurrent loading of other page element, css and images.

Second, if you not change anything in the server side, use GET instead of POST. To avoid caching in IE, just add another parameter that have random value.

Third, the line $("#output").html(""); is not necessary. You can put the $("#output").html(response); because .html() will replace any existing content inside the container. No need to emptied it.

Upvotes: 1

Industrial
Industrial

Reputation: 42758

Why public function?

public function test(){

    echo $this->input->post('lurl');

    }

Remove public and just make it a function as anyone else: http://codeigniter.com/user_guide/general/controllers.html

Try also to include the whole URL in the javascript to try if it work:

$.post("http://yourwebsite/oxila/test/")

Upvotes: 0

Teej
Teej

Reputation: 12873

make sure your config has this setting to FALSE;

$config['compress_output'] = FALSE;

Upvotes: 0

streetparade
streetparade

Reputation: 32888

You dont have a view for Your Test Function and Your Model to handle the Post Request isnt present

Upvotes: 0

Related Questions