【问题标题】:Ajax and rewrite engineAjax 和重写引擎
【发布时间】:2012-11-07 10:24:22
【问题描述】:

我在使用 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;
    });
});

【问题讨论】:

  • 什么时候你的问题是 PHP 或 MySQL 相关的,你用这种方式标记了它?
  • 好的,抱歉,标签已删除。

标签: javascript ajax .htaccess


【解决方案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。这就是我使用单独的文件来存储常量的原因,而不是使用 &lt;?= ... ?&gt; 标签直接将其注入到 javascript 本身中。

【讨论】:

  • 完美!谢谢,我已经为此工作了好几个小时......工作正常,但我使用了这个脚本:gotknowhow.com/articles/how-to-get-the-base-url-with-javascript
  • 顺便说一句,php 脚本对我不起作用,它只是写出了整个源代码。
  • 嗨,Markl,错误是什么?请记住 RELATIVE_FOLDER 不是预定义的常量。您必须在 PHP 中使用define('RELATIVE_FOLDER', '/path/to/folder'); 定义它(在脚本中或在单独的包含文件中)
  • 我当然知道,但看起来我在某处有语法错误,因为看起来某处缺少“,但还没有找到。
  • 我明白了,祝你好运!让我知道我是否可以提供帮助。也许 myNamespace(或任何你的命名空间)没有定义?
猜你喜欢
  • 2010-11-10
  • 2015-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 2012-03-06
相关资源
最近更新 更多