PHP включает функции и загрузку div AJAX

У меня есть сгенерированная php веб-страница, на которой есть несколько div, изначально созданных с использованием php.

<div id ="siteLeft" class ="site">
    <div id="divGauges"><?php include('gauges.php');?></div>
    <div id="divHistory"><?php include('history.php');?></div>
</div>
<div id="siteRight" class ="site">
    <div id="divLymGauges"><?php include('gaugesLym.php');?></div>
    <div id="divLymHistory"><?php include('historyLym.php');?></div>
</div>

Затем эти div перезагружаются каждые 10 секунд с помощью вызова AJAX, который находится в отдельном файле scripts.js:

function updateHistory(){
    $('#divHistory').load('history.php'+"?ms=" + new Date().getTime());
    $('#divLymHistory').load('historyLym.php'+"?ms=" + new Date().getTime());
}
setInterval( "updateHistory()", 10000 );

В history.php и historyLym.php у меня есть вызов функции, и эта функция находится в другом файле с именем functions.php.

If I do:

include ('functions/functions.php');

на странице index.php, тогда div прекрасно отображается при начальной загрузке, но я получаю

Fatal error: Call to undefined function 

отображение на веб-странице после вызова AJAX обновляет div с помощью history.php и historyLym.php (очевидно, поскольку включение файла функции не находится в div, который является единственным вызываемым битом).

Поэтому я попытался включить functions.php в загружаемые элементы div. Если я это сделаю, то при начальной загрузке страницы я получаю:

Fatal error: Cannot redeclare getForce()

что также имеет смысл, так как при начальной загрузке оба div содержат включение для functions.php.

Включение включения только в один из div приводит к нормальной загрузке страницы (как и должно быть), но при обновлении AJAX div я получаю эту ошибку:

Fatal error: Call to undefined function getForce()

что опять же имеет смысл, так как два элемента div обновляются независимо с помощью AJAX, поэтому только элемент div с включенным для functions.php сможет использовать эту функцию.

Итак, мои вопросы:

Где я могу поместить включение для functions.php, чтобы div могли использовать функции functions.php при начальной загрузке страницы И при отдельных отдельных обновлениях AJAX??


person DazEvans    schedule 19.07.2013    source источник


Ответы (3)


Сначала включите файл функции в свой index.php,
Затем добавьте его в начало ваших включаемых файлов (например: gauges.php, history.php, etc..)

<?php
  if ( !function_exists( "getForce" ) ) {
    // include the function file
  }
?>

Вы можете заменить getForce любыми другими именами функций, которые определены в вашем файле function.

person bystwn22    schedule 19.07.2013
comment
Это работает отлично, я знал, что это должно быть что-то простое :) - person DazEvans; 19.07.2013

попробуй использовать:

    include_once('functions/functions.php');

Вы можете добавить этот код в history.php и historyLym.php

person srain    schedule 19.07.2013
comment
спасибо за ответ, но это приведет к тем же ошибкам, которые я уже испытываю: w3schools.com /php/php_includes.asp - person DazEvans; 19.07.2013
comment
это include_once, а не include. - person srain; 19.07.2013
comment
Извини, Срейн, я этого не заметил! - person DazEvans; 19.07.2013
comment
не бери в голову. include_once упростит ваш код. Нет необходимости судить, существовала ли функция. что если вы изменили имя функции getForce? - person srain; 19.07.2013

Включить файл functions.php в history.php и historyLym.php и не удалять из index.php. Обратите внимание, что нет необходимости удалять его из файла index.php, так как он также должен загружать данные при начальной загрузке страницы.

person Yogesh    schedule 19.07.2013
comment
спасибо за ответ, но наличие его во всех трех местах по-прежнему вызывает проблему избыточности. - person DazEvans; 19.07.2013