我有一个返回som html的函数。
我喜欢这个函数既可以用作模板函数,也可以用于ajax。
我了解到你应该总是使用die();在ajax函数的末尾返回html。这将打破包含该函数作为模板的脚本,尽管与ajax调用一起正常工作,因为它只加载页面的一部分,并且其后的所有内容都已加载。
如果我不使用die(),两者都可以正常工作,但是ajax会向页面返回一个额外的“0”。我不确定是否有其他原因导致这种方法错误。
所以我的问题是,在模板中重用ajax函数的最佳方法是什么。我想这样做,所以我不必写两次整个HTML输出。维持会很烦人。
谢谢:)
答案 0 :(得分:1)
首先关闭 - 很高兴看到您关心您的软件设计,它会定义为您节省一些麻烦。我不能确切地说为什么对于AJAX函数使用die()应该是一件好事,因为这会抑制任何进一步的输出。您应该做的是对演示文稿和逻辑进行更严格的分离,但这是您应该自己研究的事情。
对于您目前的情况(看起来您正在构建网站导航或类似的东西),对于所有请求返回相同的内容( - >离开die())并且您只是最好的在JavaScript中删除不需要的东西,这将允许您构建一个优雅降级的AJAX站点(没有JavaScript的用户仍然可以使用该站点)
如果上述情况不正确,那么您可能也可以使用以下内容:
function is_xhr_request()
{
return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest';
}
和这样的支票:
if(is_xhr_request()){die();}
假设标题设置正确(在大多数情况下应该是这样),可能是一个很好的解决方法。
该功能取自Toro Framework
答案 1 :(得分:0)
所以我所要做的就是在我的函数中写一个条件检查:
//Detect if function was called with ajax.
if (strcasecmp('XMLHttpRequest', $_SERVER['HTTP_X_REQUESTED_WITH']) === 0)
{
//Always die when returning output with ajax.
die();
}
那就做到了。但我认为可能必须使用jquery或其他一些ajax框架调用ajax调用才能使其工作 - 尽管不确定:)