我正在编写一个将返回数据库结果的函数。
如果从另一个函数调用该函数,我需要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?
依赖服务器而不是client / js框架是不安全的。
更新2:结果
function employees($id = NULL, $return = FALSE) {
.
.
.
if($return === TRUE) return json_encode($data);
else echo json_encode($data);
}
答案 0 :(得分: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()
结果,您应该实现另一个代表key =>的函数。来自SQL服务器的val对。
答案 1 :(得分:1)
尝试为employees
函数提供可选标记:
function employees ($shouldEchoResult = true) {
if ($shouldEchoResult) {
echo $result;
}
else {
return $result;
}
}
如果使用AJAX调用它,请不要设置标志。否则,请在代码中使用categories(false)
。这是我能想到的唯一其他解决方案。 PHP没有像Ruby那样内置任何东西。