我有以下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文件放在与页面文件相同的文件夹中?
答案 0 :(得分:2)
我强烈建议考虑使用框架。 (Yii是一个很好的。)框架将优雅地处理这样的事情。
此外:
如果您无法使用框架,请考虑使用全局帮助程序函数来创建和操作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文件。