【问题标题】:PHP and AJAX function to return or echo based on callPHP 和 AJAX 函数根据调用返回或回显
【发布时间】:2012-06-14 12:19:27
【问题描述】:

我正在编写一个返回数据库结果的函数。

如果函数是从另一个函数调用的,我需要它来return 数据,而当它通过 AJAX 调用时,我需要 echo 数据。

可能的解决方案

  • 传入一个参数...if($echo) echo $data; else return $data;
  • 单独的功能...function employees_ajax() { echo $this->employees(); }

我更喜欢更智能的东西,它可以检测到“自身”是从另一个函数和return 调用而不是echo。

更新

另一种可能性是检查 $_SERVER 变量。

“据我所知,X-Requested-With 是由大多数主要框架的 Ajax 函数发送的,但不是全部......可以肯定地说,它通常不是 100% 可靠的方法来确定是否请求是否为 AJAX 请求。”

Does $_SERVER['HTTP_X_REQUESTED_WITH'] exist in PHP or not?

依赖服务端而不是客户端/js框架是安全的。

更新 2:结果

function employees($id = NULL, $return = FALSE) {

    .
    .
    .
    if($return === TRUE) return json_encode($data);
    else echo json_encode($data);
}

【问题讨论】:

  • 我认为这不是一个好方法。您应该处理调用 php 的返回。
  • employees()返回什么样的数据?如果它是 AJAX 和 PHP 数组,你想返回 JSON 吗?
  • @woz employees() 应该为这两种情况返回一个 JSON 字符串...return json_encode($data); 或 echo json_encode($data);。
  • PHP调用函数时,JSON怎么处理?

标签: php ajax backbone.js crud


【解决方案1】:

当然,会抛出“遇到 PHP 错误”错误,因为您在 $_SERVER superglobal 中获得了未定义的键。

首先,创建判断查询是否来自 XMLHttpRequest 的函数。

/**
 * 
 * @return BOOl, true if ajax, false if regular way
 */
function is_ajax(){
  return isset($_SERVER['HTTP_X_REQUESTED_WITH']);
}

然后,根据 is_ajax() 结果,您应该实现另一个函数,该函数代表 SQL 服务器中的 key => val 对。

【讨论】:

    【解决方案2】:

    尝试为您的 employees 函数添加一个可选标志:

    function employees ($shouldEchoResult = true) {
    
      if ($shouldEchoResult) {
        echo $result;
      }
      else {
        return $result;
      }
    
    }
    

    如果使用 AJAX 调用,请不要设置标志。否则,在您的代码中,使用categories(false)。这是我能想到的唯一其他解决方案。 PHP 没有像 Ruby 那样内置任何东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-31
      • 1970-01-01
      • 2023-03-29
      • 2016-09-22
      • 1970-01-01
      • 1970-01-01
      • 2016-07-25
      • 1970-01-01
      相关资源
      最近更新 更多