PHP和AJAX函数基于调用返回或回显

时间:2012-06-11 15:04:36

标签: php ajax backbone.js crud

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

如果从另一个函数调用该函数,我需要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);
}

2 个答案:

答案 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那样内置任何东西。