Переменная php включает глобальную ошибку

Моя основная страница PHP представляет собой 1 форму текстового поля. Форма отправляется самой себе и отображает информацию (machine.php?pc=workstation101), извлеченную из БД.

Также на этой странице у меня есть отдельный ping.php, который будет пинговать искомую машину каждые 60 секунд. Это помещается в div, и jQuery автоматически обновляет эту внешнюю страницу ping.php.

Если я отключу код обновления jQuery (показан ниже)...

<script>
 $(document).ready(function() {
      $("#pinger").load("inc/ping.php");
      var refreshId = setInterval(function() {
        $("#pinger").load('inc/ping.php');
      }, 60000);
    $.ajaxSetup({ cache: false });
  });
</script>

... включаемый файл работает нормально. Показывает правильный статус пинга. Однако мне нужно использовать $GLOBALS['variable'] для доступа к переменным с родительской страницы index.php. Но он отлично работает, когда я это делаю.

Теперь, после того, как я включу обновление jQuery, я получаю массу ошибок «Notice: Undefined index:....». Я сузил все это до того, что $_GET['pc'] не передается ни в какой форме при перезагрузке содержимого DIV.

Он работает как включение. Не работает как страница загрузки jQuery. Возможно, я мог бы закодировать страницу включения на странице индекса и обновить содержимое div без внешней страницы? Не могу найти код, который будет работать с этим методом.

Идеи?


person vashavoc    schedule 14.03.2013    source источник
comment
Вы примерно ответили на свой вопрос. Вы не передаете pc в строке запроса с кодом jquery. Ваш php ожидает найти его. Уведомления кидают.   -  person datasage    schedule 15.03.2013


Ответы (2)


Включение PHP-страницы и получение ее из браузера — две совершенно разные вещи.

Когда вы говорите jQuery загрузить inc/ping.php, это точно так же, как если бы вы загрузили эту страницу в другом окне браузера. Исходная страница PHP уже завершена, и ее переменных больше не существует.

В этом случае вам просто нужно создать URL-адрес, например /dynamic/ping.php?pc=foo, и загрузить его.

person IMSoP    schedule 14.03.2013
comment
Хороший указатель, спасибо. Исправлены две строки в моем JS.... $(#pinger).load(inc/ping.php?pc=‹?php echo $machinename ?›); - person vashavoc; 15.03.2013

я не совсем уверен, чего вы пытаетесь достичь, и я не могу комментировать, чтобы спросить, но этот jquery выглядит неправильно. Прежде всего, я предполагаю, что вы хотите передать значение вашего текстового поля в серверную часть PHP?

Попробуйте это в скрипте:

<script>
    function ping(){
        $.ajax("inc/ping.php?pc="+encodeURIComponent($("#your_textbox_id").val()),{})
            .success(function(data)){
                // Your php return values are here
            }).fail(function(error){
                // alert('somthing went wrong');
            })
        });
        window.setTimeout("ping()", 60000);
    }

    $(document).ready(function(){
        ping();
    });
</script>

Обратите внимание, что это не проверено и может иметь синтаксические ошибки... но может решить вашу проблему

person Adam    schedule 14.03.2013