在Ajax调用中调用PHP类

时间:2013-07-28 18:42:56

标签: php jquery ajax

我有以下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总是会中断。问题似乎是,在Ajax文件或进行Ajax调用的页面中,PHP类('Element.php')的相对路径始终无效,因为两个文件都在不同的目录中。

我现在已经解决了这个问题,只需将Ajax调用放在与调用页面相同的目录中,但我不喜欢它,因为它没有组织。我可以简单地将所有require类调用更改为绝对URL,但是在上传到生产服务器时我必须更改它们。

有任何想法或最佳做法吗?或者我应该简单地将Ajax文件放在与页面文件相同的文件夹中?

2 个答案:

答案 0 :(得分:2)

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

此外:

  1. 使用GET,而不是POST。您正在获取数据,而不是发布数据。
  2. 不要将PHP文件放在“ajax /”目录中。它不是特定于ajax的文件;如果您现在使用适当的网络表单发布到它,您将获得相同的结果。
  3. 如果您无法使用框架,请考虑使用全局帮助程序函数来创建和操作Url。

    E.g:

    /**
     * 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;
    }
    

答案 1 :(得分:0)

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

如果您在页面中加入ajax/load-sp-feed.php,因为您还希望在页面加载时将其打印出来。你做错了什么。您不应该在页面本身使用ajax文件。