Страница не загружается после вызова PHP формы функции Javascript - PullRequest
0 голосов
/ 27 апреля 2020

Когда я вызываю функцию PHP из функции javascript (находится во внешнем файле. js), веб-страница обновляется и, как представляется, прекращает загрузку при функции PHP.

function completePurchase(){

    //check if perosn signed in
    if (signedIn){
    alert("Purchase Complete! Total : " + total);
    //Upadte database - call PHP function in MainPage2 
    document.write('<?php echo upadtePurchaseToDB();?>');

    }
}

Функция PHP находится на странице PHP, заключенной в теги PHP:

//PHP to handle data when purchase button is pressed 
  function upadtePurchaseToDB(){

    echo "PHP CALLAED AS PURCHASE BUTTON PRESSED";

};

Идея состоит в обновлении базы данных при вызове функции PHP.

Однако при вызове страница обновляется и остается пустой. В консоли, если я перехожу на вкладку «Элемент», я вижу вызов PHP:

Не уверен, что основная проблема заключается в том, как я вызвал функцию PHP, используя JS или где размещена функция PHP.

1 Ответ

3 голосов
/ 27 апреля 2020

Одна проблема заключается в том, что вы пытаетесь создать код JS genarate PHP, а затем ожидаете, что это сработает: это невозможно. PHP запускается на сервере и только «делает что-то», когда браузер запрашивает страницу: PHP генерирует исходный код для браузера. Это все, что он делает .

Когда в браузере есть страница, появляется JS и PHP больше нигде не найти: см. Разница между Javascript и PHP для получения дополнительной информации по этому вопросу, и я настоятельно рекомендую прочесть об этом.

Однако проблема real , которую вы повторное описание (ваша страница, кажется, перезагружается, но умирает в коде PHP), вызвано тем, что вы используете document.write(), который не делает то, что вы думаете, , и вы не должны использовать его в современный код .

document.write является одной из самых ранних функций в JS и имеет очень низкий уровень: он не записывает текст на веб-страницу, он записывает байт в document bytestream , чтобы анализатор документов мог одновременно получать данные из bytestream и анализировать их в дереве страниц.

Пока страница еще обрабатывается, это кажется безопасным : document.write просто вставит байты в открытый поток байтов, и парсер разберет это, и все будет хорошо. Однако, как только дерево страниц завершено и документ bytestream закрывается, все начинается с go очень, очень неправильно:

Любой вызов document.write попытается записать в открытый поток текста, и если он закрыто, document.write просто откроет байтовый поток: теперь у вас есть пустой документ байтового потока. А поскольку анализатор документов видит открытый поток сообщений, он начинает строить дерево страниц на основе того, что в нем, и теперь ваша страница исчезла, потому что это то, что вы сказали браузеру.

Это также не тот случай, когда он «кажется, перестает загружаться при функции PHP», что на самом деле происходит, когда вы сообщаете парсеру страниц, что новый код страницы для формирования дерева страниц является последовательностью байтов <?php echo upadtePurchaseToDB();?>. Итак, парсер смотрит на это, видит <, и поэтому знает, что после этого будет тег, потому что именно так работает HTML. Затем он видит ? и выдает «Ошибка: этот HTML недействителен HTML» и останавливается.

Таким образом, суть здесь в том, чтобы прочитать, где и когда работает PHP, против где и когда JS работает, но, возможно, еще важнее: никогда не использует document.write, потому что он вообще не делает то, что вы думаете .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...