PHP 和 AJAX 函数根据调用返回或回显


PHP and AJAX function to return or echo based on call

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

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

可能的解决方案

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

我更喜欢更聪明的东西,可以检测到"自身"是从另一个函数调用的,return而不是echo

更新

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

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

$_SERVER['HTTP_X_REQUESTED_WITH'] 在 PHP 中是否存在?

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

更新 2:结果

function employees($id = NULL, $return = FALSE) {
    .
    .
    .
    if($return === TRUE) return json_encode($data);
    else echo json_encode($data);
}

当然,"遇到 PHP 错误"错误会被抛出,因为,您在超全局$_SERVER获得未定义的密钥。

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

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

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

尝试为您的employees函数提供一个可选标志:

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

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