如何在ajax和非ajax中使用相同的php函数

时间:2013-12-10 14:47:24

标签: php ajax die

我有一个返回som html的函数。

我喜欢这个函数既可以用作模板函数,也可以用于ajax。

我了解到你应该总是使用die();在ajax函数的末尾返回html。这将打破包含该函数作为模板的脚本,尽管与ajax调用一起正常工作,因为它只加载页面的一部分,并且其后的所有内容都已加载。

如果我不使用die(),两者都可以正常工作,但是ajax会向页面返回一个额外的“0”。我不确定是否有其他原因导致这种方法错误。

所以我的问题是,在模板中重用ajax函数的最佳方法是什么。我想这样做,所以我不必写两次整个HTML输出。维持会很烦人。

谢谢:)

2 个答案:

答案 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调用才能使其工作 - 尽管不确定:)