我会这样说:我对这一切都很陌生。我真的只是崩溃了我能找到的一切。我是一名艺术家和一名作家,去年我才开始研究这些东西。
我正在开发一个项目,它结合了cms,项目管理器和数据库前端(以及我的组可能想要添加的任何其他内容)。我正在构建这个php,mysql和javascript。但是我在设置基础时遇到了麻烦。
我正在尝试测试一些事情,首先是使用AJAX为数据后端调用php脚本的mysql查询。
这个项目有两个文件夹,一个私人文件夹和一个公共文件夹。一切都通过index.php引导程序文件。我有一个.htaccess mod_rewrite,如下所示:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/URL
RewriteRule ^(.*)$ index.php/$1 [PT,L]
</IfModule>
<IfModule !mod_rewrite.c>
ErrorDocument 404 /index.php
</IfModule>
php_value include_path "../private/libs/classes/:../private/config/:../private/config/inc/:../private/libs/smarty/:../private/libs/scripts/:../private/libs/smarty/libs/:../private/libs/smarty/libs/sysplugins/:../private/libs/smarty/libs/plugins/"
我这里有一些javascript,应该调用php脚本showCode.php:
<script>
function showCode(str)
{
if (str=="")
{
document.getElementById("code").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("code").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST","showCode.php",false);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("id="+str);
}
</script>
我不关心我的PHP。我已经分别测试了所有脚本并且它们工作正常,我的引导程序文件从未给我任何麻烦。我有一个相对复杂的装载系统,一直都很完美。
我有一种严重的预感,那就是.htaccess给我带来了麻烦。 mod_rewrite可能导致ajax无法访问showCode.php文件,但在我的生活中我无法找到答案。
有什么建议吗?
我会喜欢任何帮助,但我不是一个与jquery合作的人...我真的很想学习基础javascript的来龙去脉。一旦我对此有了足够的熟练,我就会进入图书馆。
- EDIT -------------------
好的,感谢我在这里得到的一些有用的建议,我发现.htaccess不是我的问题。我想通过AJAX函数引入的任何代码都会使用我以前的PHP设置(我通过引导程序引入所需的文件)...只是考虑一下,这很荒谬,因为php在服务器上运行AJAX调用只是在客户端上重新加载div。所以......现在我必须相应地修改我的代码......
- FINAL ------------------
是的......我需要在showCode脚本中包含baseConfig脚本。现在一切正常,.htaccess重写到位。谢谢你指点我正确的方向。
答案 0 :(得分:0)
如果您认为某些脚本或文件遇到问题,请找一种方法在没有该脚本或文件的情况下尝试整个设置...在我的情况下,我认为是罪魁祸首的.htacces 。原来与该文件没有任何关系,在我评论完我的重写后我才能发现。
所以,真正的答案是......当你对另一个需要通过引导程序加载的逻辑或其他文件的脚本进行AJAX调用时......不要认为引导程序会加载它。当然,PHP是一种服务器端语言。当您调用AJAX函数时,您正在从客户端执行此操作,原始引导已经完成执行...在被调用的php中需要您需要的任何内容,或创建某种ajax引导程序文件,您可以通过它加载任何脚本通过javascript函数。这是一个简单的例子......或者可能是一个不那么简单的例子......不管怎样,这是我的榜样:
<强>使用Javascript:强>
function ajaxLoader(post,script,div){
if (post==""){
document.getElementById(div).innerHTML="";
return;
}
if (window.XMLHttpRequest){
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}else{
// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
document.getElementById(div).innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("POST","/includes/scripts/ajaxBootstrap.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
/* This is a very simple one, with only 'id' being sent to the script
by the sender below. With more effort, I'm sure you could make it send
multiple data by taking out "&id=" and only working with the post variable*/
xmlhttp.send("script="+script+"&id="+post);
}
PHP ajax bootstrap:
加载所有必需的脚本/函数/ includes / etc,而不必包含每个新脚本
<?php
// require configuration
require_once('config.php');
// test whether the $_POST array has a key called 'script', which should be set in the javascript function.
IF(array_key_exists('script',$_POST)){
foreach($_POST as $key=>$data){
// set variable variables from the $_POST data
$$key = $data;
}
// include the called script
include($script.".php");
}ELSE{
// place any error messages you'd like to show.
}
?>
另外,我不确定这是否有必要(可能会在配置文件中使用ini_set来避免这种情况),但我发现由于放置了引导程序,我必须将带有补偿的php include_paths的.htaccess文件放入在与index.php文件不同的文件夹中。
PHP脚本:
这是实际执行我们想要的代码
<?php
$form = new forms;
$id = $form->getPOST('id');
$connection = new dbPortal;
eval($connection->showSingle('pages', 'page_content', $id));
?>
我已经对此进行了测试,当然,它对我来说非常有效,包括我的课程和其他我未在此处展示的内容。