Mark
Mark

Reputation: 77

Ajax and rewrite engine

I have a problem with ajax and rewrite engin. I made a site, where I use this load more script:

http://www.9lessons.info/2009/12/twitter-style-load-more-results-with.html

Everything works fine on users profile page (I am getting posts from users feedback), when the url looks like this: example.com/user.php?u=ExampleUser but I have this in .htaccess:

RewriteRule ^u/(.*) user.php?u=$1 [L]

So if I type something like example.com/u/ExampleUser I get the username like:

$username = $_GET['u'];

But in this way when I click on the load more it doesn't load more posts from the user, it just starts to lead the site itself to the div box (like it is an iframe...). Please help me, it is necessary. Here is my script, which should load more info from MySQL database($id is userid from DB):

$(function() {
    // More Button
    $('.more').live("click",function() {
        var ID = $(this).attr("id");
        if (ID) {
            $("#more" + ID).html('<img src="moreajax.gif" />');

            $.ajax({
                type: "POST",
                url: "ajax_more.php",
                data: 'lastmsg='+ID+'&user='+<? echo $id; ?>,
                cache: false,
                success: function(html) {
                    $("#container").append(html);
                    $("#more"+ID).remove();
                }
            });
        } else {
            $(".morebox").html('The End');
        }
        return false;
    });
});

Upvotes: 2

Views: 178

Answers (1)

Julian H. Lam
Julian H. Lam

Reputation: 26124

Not knowing the entire context of your code, it looks like when the ajax call is made, the final url is something along the lines of domain.tld/u/ajax_more.php.

I get around this issue by maintaining a list of constants in the javascript object.

For example, I have a paths.php file that contains this:

<?php
    header("Content-Type: text/javascript");
    echo "
        myNamespace.paths = {
            RELATIVE_FOLDER: '<?=RELATIVE_FOLDER?>',
            // add more as required...
        }
    ";
?>

This is included in the page just like a regular script (with script tags), and from that point forward, myNamespace.paths will contain your constants, as returned by the server.

In my case, if the URL was "http://www.example.org/path/to/my/dev/env", I would have RELATIVE_FOLDER set to /path/to/my/dev/env/ on the server-side, which would then be included into the paths object.

Later, in your ajax calls:

$.ajax({
    type: "POST",
    url: myNamespace.paths.RELATIVE_FOLDER + "ajax_more.php",
    // ... everything else
});

I notice you have no problem with directly injecting PHP into your scripts. This is not necessarily a bad thing, but it does make it harder for you to minify your js. This is the reason why I went with a separate file to store the constants, instead of directly injecting it into the javascript itself with <?= ... ?> tags.

Upvotes: 1

Related Questions