好的,
我有一个错误模块,它基本上只是一个样式化的 div,它调用 PHP 函数来打印错误。
当我像这样包含它时,它完美地工作:
<?php if(!empty($errors)){
include 'includes/modules/error.mod.php';
}else if(!empty($success)){
include 'includes/modules/success.mod.php';
}?>
但我现在尝试使用 jQuery 使其更加华丽,因此我将其包含在 jQuery 函数中:
function errorModule(){
$.get('includes/modules/error.mod.php', function(data){
var errorModule = $(data).hide();
errorModule.appendTo($('#navMain')).show('blind', 1500);
});
}
现在,它基本上可以正常工作了。错误模块看起来像我也想要它。然而,曾经完美运行的 PHP 函数现在“未定义”。
为什么?
编辑:error.mod.php 的内容
<div id="errorModule">
<p class="h2">The Following Errors Have Occured:</p>
<?php
echo outputArray($errors);
?>
</div>
最佳答案
AJAX 调用( $.get
的目的)与 include
不同,它是对所提供 URL 的单独 Web 请求。所以在这种情况下, $.get
正在获取什么与将浏览器指向 includes/modules/error.mod.php
时加载的内容相同- 调试 AJAX 的一个好方法就是这样做。
根据文件名,我怀疑这不是您想要的,并且该文件不应该单独加载。
要使用 AJAX,您需要一个新的 PHP 页面,例如 ajax_message_output.php
,它执行必要的处理以将“模块”输出到页面上。请注意,此页面不会包含“父”页面中的任何数据 - 例如,$errors
在您的新 ajax_message_output.php
中将不会具有相同的值它在主页上有。
如果您想要做的只是显示主页面加载的错误,但让它们看起来“更华丽”,那么 AJAX 不是您想要的技术。要使它们向下滑动,只需将它们最初隐藏(使用<div id="messages" style="display: none;">...</div>
或类似的)并使用$('#messages').show('blind', 1500)
页面加载时运行。
关于PHP 函数被 jQuery 包含时未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17016104/