我正在编写一个将返回数据库结果的函数。
如果从另一个函数调用函数,我需要它来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那样内置任何东西。