0

我有以下 Ajax 调用:

function loadFPFeed(catid)
{
    var dataStream = 'catid=' + Number(catid);
    var failMsg = 'Sorry, but there was a problem retrieving the news feed. Please try again later.';
    $.ajax({
        type: 'POST',
        url: "ajax/load-sp-feed.php",
        data: dataStream,
        cache: false
    }).done(function( res ) {
        if(res != false)
        {
            $('#ppContent').html(res);
            $('#ppContentCover').fadeOut(200, function() { $(this).remove(); });
        }
        else
        {
            $('#ppContentCover').html('<div id="failMsg">' + failMsg + '</div>');
        }
    }).fail(function( res ) {
        $('#ppContentCover').html('<div id="failMsg">' + failMsg + '</div>');
    });
}

这会调用一个 PHP 文件,该文件用于在页面中提取新闻源:

<?php

$catid = intval($_POST['catid']);

require_once '../classes/Element.php';

$obj = new Element();

$obj->spNewsFeed($catid);

?>

我想做的是将我所有的 Ajax 调用放入它们自己的文件夹中。但是,当我这样做时,相对 URL 总是会中断。问题似乎是 PHP 类 ('Element.php') 的相对路径在 Ajax 文件或进行 Ajax 调用的页面中总是无效的,因为这两个文件位于不同的目录中。

我现在通过简单地将 Ajax 调用放置在与发出调用的页面相同的目录中解决了这个问题,但我不喜欢这样,因为它杂乱无章。我可以简单地将所有 require 类调用更改为绝对 URL,但是在上传到生产服务器时我必须将它们全部更改。

有什么想法或最佳实践吗?还是我应该简单地将 Ajax 文件与页面文件放在同一个文件夹中?

4

2 回答 2

2

我强烈建议研究使用框架。(Yii是一个很好的框架。)该框架将优雅地处理这样的事情。

还:

  1. 使用 GET,而不是 POST。您正在获取数据,而不是发布数据。
  2. 不要将 PHP 文件放在“ajax/”目录中。它不是特定于 ajax 的文件;如果您现在使用适当的网络表单发布到它,您会得到相同的结果。

如果您无法使用框架,请考虑使用全局辅助函数来创建和操作 Url。

例如:

/**
 * Create an absolute URL relative to the base path
 * 
 * (You'd want to modify this to normalize the path...)
 * 
 * @return string
 **/
function createUrl($relativePath)
{
    return getBasePath().normalizePath($relativePath);
}

/**
 * Returns the base path in the current environment
 **/
function getBasePath()
{
    return 'http://localhost:8080/';
}

/**
 * Normalizes the given path ('path/to/my/file') to some
 * consistent form. E.g., might make sure there's a 
 * leading '/'.
 **/
function normalizePath($path)
{
    return $path;
}
于 2013-07-28T18:54:20.680 回答
0

这没有意义,进行AJAX调用的页面不使用Element.php文件?如果是这样,它是一段不同的代码,所以你可以只在那里改变路径并且它是固定的。

如果您将 包含ajax/load-sp-feed.php在您的页面中,因为您还想在页面加载时在那里打印它。你做错了什么。您不应该在页面本身中使用 ajax 文件。

于 2013-07-28T18:53:02.660 回答