2

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

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

可能的解决方案

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

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

更新

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

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

$_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);
}
4

2 回答 2

2

当然,会抛出“遇到 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 服务器实现另一个表示 key => val 对的函数。

于 2012-06-11T20:02:48.223 回答
1

尝试给你的employees函数一个可选的标志:

function employees ($shouldEchoResult = true) {

  if ($shouldEchoResult) {
    echo $result;
  }
  else {
    return $result;
  }

}

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

于 2012-06-11T15:14:08.380 回答