【问题标题】:How to use the same php function in ajax, and non ajax如何在 ajax 和非 ajax 中使用相同的 php 函数
【发布时间】:2013-12-10 14:47:23
【问题描述】:

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

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

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

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

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

谢谢你:)

【问题讨论】:

  • 可能在请求中使用了一些标志作为“ajax=true”?
  • 非常感谢..这是我需要通过谷歌找到答案的关键字..

标签: php ajax die


【解决方案1】:

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

对于您当前的情况(看起来好像您正在构建站点导航或类似的东西),最好所有请求都返回相同的内容(-> 将 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

【讨论】:

  • 谢谢.. 正是我需要的。当我可以的时候,除了这个答案。但我也会发布我的确切修复 - 尽管据我所知它的逻辑相同。
  • 太好了,总是乐于提供帮助:)
【解决方案2】:

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

//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 调用才能使其正常工作 - 虽然不确定:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 2015-02-15
    相关资源
    最近更新 更多