2

我有一个ajax问题并重写引擎。我创建了一个站点,在这里我使用了这个加载更多脚本:

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

当 url 看起来像这样:example.com/user.php ?u=ExampleUser 但我在 .htaccess 中有这个:

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

因此,如果我输入类似example.com/u/ExampleUser的内容,我会得到如下用户名:

$username = $_GET['u'];

但是以这种方式,当我单击加载更多时,它不会从用户那里加载更多帖子,它只是开始将网站本身引导到 div 框(就像它是 iframe 一样......)。请帮助我,这是必要的。这是我的脚本,它应该从 MySQL 数据库加载更多信息($id 是数据库中的用户 ID):

$(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;
    });
});
4

1 回答 1

1

不知道代码的整个上下文,看起来当进行 ajax 调用时,最终的 url 类似于domain.tld/u/ajax_more.php.

我通过在 javascript 对象中维护一个常量列表来解决这个问题。

例如,我有一个paths.php包含以下内容的文件:

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

这就像常规脚本(带有script标签)一样包含在页面中,并且从那时起,myNamespace.paths它将包含您的常量,如服务器返回的那样。

就我而言,如果 URL 是“http://www.example.org/path/to/my/dev/env”,我会在服务器端RELATIVE_FOLDER设置为/path/to/my/dev/env/,然后将其包含在路径对象中.

稍后,在您的 ajax 调用中:

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

我注意到您将 PHP 直接注入脚本没有问题。这不一定是坏事,但它确实让你更难缩小你的 js。这就是为什么我用一个单独的文件来存储常量,而不是直接用<?= ... ?>标签将它注入到 javascript 本身中的原因。

于 2012-11-19T14:05:12.460 回答