2

データベースの結果を返す関数を書いています。

return関数が別の関数から呼び出された場合echoはデータに、AJAXを介して呼び出された場合はデータに必要です。

可能な解決策

  • パラメータを渡します...if($echo) echo $data; else return $data;
  • 個別の機能...function employees_ajax() { echo $this->employees(); }

'itself'が。returnの代わりに別の関数から呼び出されたことを検出できる、よりスマートなものが必要ですecho

アップデート

もう1つの可能性は、$_SERVER変数をチェックすることです。

「私が知る限り、X-Requested-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);
}
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 に答える