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


How to use the same php function in ajax, and non ajax

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

我希望这个函数既可以用作模板函数,也可以与ajax一起使用。

我知道你应该一直使用die();在返回html的ajax函数的末尾。这将破坏包含该函数作为模板的脚本,尽管使用ajax调用可以很好地工作,因为它只加载页面的一部分,以及加载之后的所有内容。

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

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

谢谢:)

首先,很高兴看到您关心您的软件设计,这无疑会为您省去一些麻烦。我不能确切地说明为什么对AJAX函数使用die()应该是一件好事,因为这些函数会抑制任何进一步的输出。你应该做的是更严格地分离演讲和你的逻辑,但这是你应该研究自己的事情。

对于你目前的情况(看起来就像你在构建一个网站导航或类似的东西),最好是所有请求都返回相同的东西(->leave die()out),并且你只需要在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

Soo我所要做的就是在我的函数中写一个条件检查:

//Detect if function was called with ajax. 
    if (strcasecmp('XMLHttpRequest', $_SERVER['HTTP_X_REQUESTED_WITH']) === 0)
    {
        //Always die when returning output with ajax. 
        die();
    }

确实如此。但我认为ajax调用可能必须用jquery或其他ajax框架调用才能正常工作-但不确定:)