Урок за PHP Ajax с пример

⚡ Умно обобщение

Ajax в PHP позволява на уеб страница да обменя малки количества данни със сървъра и да актуализира част от страницата без пълно презареждане. Това ръководство изгражда търсене в рамка на живо, обяснявайки класическия подход XMLHttpRequest и съвременната алтернатива на Fetch API.

  • 🔄 Какво е Аякс: Аякс, асинхронен JavaСкрипт и XML, актуализира част от страницата чрез обмен на данни със сървъра без пълно обновяване.
  • ⚡ Защо да го използвате: Ajax захранва богати, подобни на настолни функции, като например автоматично довършване, валидиране на живо и зависими падащи менюта.
  • ️ Клиент и сървър: JavaСкриптът се изпълнява в браузъра и извиква PHP скрипт, който връща само данните, необходими за актуализиране на страницата.
  • 🔍 Търсене на живо: Обработчикът на onkeyup изпраща всяко натискане на клавиш към PHP скрипт, който незабавно връща съответстващи имена на рамки.
  • 📜 XMLHttpRequest: Класическият подход създава обект XMLHttpRequest и прочита responseText, когато заявката завърши.
  • 🆕 API за извличане: Съвременният код замества XMLHttpRequest с функцията fetch, базирана на обещания, за по-чисти и четливи заявки.
  • 🤖 AI Assist: Инструментите с изкуствен интелект могат да конвертират стар XMLHttpRequest код във fetch или axios и да помогнат за отстраняване на грешки при неуспешни Ajax заявки.

PHP Аякс

Какво е Ajax?

AJAX означава Асинхронен JavaСценарий & XML. Това е технология, която намалява взаимодействията между сървъра и клиента. Това се постига чрез актуализиране само на част от уеб страницата, а не на цялата страница. Асинхронните взаимодействия се инициират от JavaСкрипт. Целта на AJAX е да обменя малки количества данни със сървъра без обновяване на страницата.

JavaСценарий е скриптов език от страна на клиента. Той се изпълнява от страна на клиента от уеб браузъри, които поддържат JavaСценарий. JavaКодът на скрипта работи само в браузъри, които имат JavaСкриптът е активиран.

XML е акроним за Extensible Markup Language (Разширяем език за маркиране). Използва се за кодиране на съобщения както във формат, четим от човек, така и в машинно четим формат. Подобен е на HTML, но ви позволява да създавате свои собствени персонализирани тагове. За повече подробности относно XML вижте статията за XML.

Защо да използвате AJAX?

  • Това позволява развитиетоping богати, интерактивни уеб приложения, точно както настолните приложения.
  • Валидирането може да се извърши, докато потребителят попълва формуляр, без да го изпраща. Това може да се постигне чрез автоматично довършване. Думите, които потребителят въвежда, се изпращат на сървъра за обработка, а сървърът отговаря с ключови думи, които съответстват на въведеното от потребителя.
  • Може да се използва за попълване на падащо меню в зависимост от стойността на друго падащо меню.
  • Данните могат да бъдат извлечени от сървъра и само определена част от страницата да се актуализира, без да се зарежда цялата страница. Това е много полезно за части от уеб страница, които зареждат неща като:
    • Tweets
    • Коментари
    • Потребители, посещаващи сайта, и подобни данни в реално време.

Как да създадете PHP Ajax приложение

Ще създадем просто приложение, което позволява на потребителите да търсят популярни PHP MVC рамки.

Нашето приложение ще има текстово поле, където потребителите ще въвеждат имената на рамките.

След това ще използваме AJAX, за да търсим съвпадение, след което ще покажем пълното име на рамката точно под формата за търсене.

Стъпка 1) Създаване на индексната страница

index.php

<html>

<head>

<title>PHP MVC Frameworks - Search Engine</title>

<script type="text/javascript" src="auto_complete.js"></script>

</head>

<body>

<h2>PHP MVC Frameworks - Search Engine</h2>

<p><b>Type the first letter of the PHP MVC Framework</b></p>

<form method="POST" action="index.php">

<p><input type="text" size="40" id="txtHint" onkeyup="showName(this.value)"></p>

</form>

<p>Matches: <span id="txtName"></span></p>

</body>

</html>

ТУК,

  • “onkeyup=”showName(this.value)”” изпълнява JavaФункцията на скрипта показва името всеки път, когато се въведе клавиш в текстовото поле. Тази функция се нарича автоматично довършване.

Стъпка 2) Създаване на страницата с рамки

frameworks.php

<?php

$frameworks = array("CodeIgniter","Zend Framework","Cake PHP","Kohana") ;

$name = $_GET["name"];

if (strlen($name) > 0) {

$match = "";

for ($i = 0; $i < count($frameworks); $i++) {

if (strtolower($name) == strtolower(substr($frameworks[$i], 0, strlen($name)))) {

if ($match == "") {

$match = $frameworks[$i];

} else {

$match = $match . " , " . $frameworks[$i];

}

}

}

}

echo ($match == "") ? 'no match found' : $match;

?>

Стъпка 3) Създаване на JS скрипт

auto_complete.js

function showName(str){

if (str.length == 0){ // exit function if nothing has been typed in the textbox

document.getElementById("txtName").innerHTML=""; // clear previous results

return;

}

if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari

xmlhttp=new XMLHttpRequest();

} else {// code for IE6, IE5

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

}

xmlhttp.onreadystatechange=function() {

if (xmlhttp.readyState == 4 && xmlhttp.status == 200){

document.getElementById("txtName").innerHTML=xmlhttp.responseText;

}

}

xmlhttp.open("GET","frameworks.php?name="+str,true);

xmlhttp.send();

}

ТУК,

  • „if (str.length == 0)“ проверява дължината на низа. Ако е 0, останалата част от скрипта не се изпълнява.
  • „ако (window.XMLHttpRequest)…“ Internet Explorer версии 5 и 6 използват ActiveXObject за AJAX имплементацията. Други версии и браузъри, като Chrome и Firefox използвайте XMLHttpRequest. Този код гарантира, че нашето приложение работи както в IE 5 и 6, така и в съвременни браузъри.
  • „xmlhttp.onreadystatechange=function…“ проверява дали AJAX взаимодействието е завършено и дали статусът е 200, след което актуализира диапазона txtName с върнатите резултати.

Стъпка 4) Тестване на нашето PHP Ajax приложение

Ако сте запазили файла index.php в phptuts/ajax, отидете до URL http://localhost/phptuts/ajax/index.php

Тестваме нашето PHP Ajax приложение

Въведете буквата C в текстовото поле. Ще получите следните резултати.

Тестваме нашето PHP Ajax приложение

Горният пример демонстрира концепцията на AJAX и как тя може да ни помогне да създаваме богати, интерактивни приложения.

Модерен AJAX с Fetch API

Горният обект XMLHttpRequest все още работи, но неговият клон ActiveXObject за стария Internet Explorer вече не е необходим. Съвременните браузъри предоставят базиран на обещания Fetch API, който прави същата заявка с много по-малко код.

function showName(str) {
    if (str.length === 0) {
        document.getElementById("txtName").innerHTML = "";
        return;
    }
    fetch("frameworks.php?name=" + encodeURIComponent(str))
        .then(response => response.text())
        .then(text => {
            document.getElementById("txtName").innerHTML = text;
        });
}

Тази версия върши същата работа: изпраща въведения текст към frameworks.php и поставя отговора в диапазона txtName. Също така използва encodeURIComponent за безопасно екраниране на входа, а веригата от обещания е лесна за разширяване с обработка на грешки, използвайки блок catch.

Въпроси и Отговори

Синхронната заявка блокира браузъра, докато сървърът не отговори, замразявайки страницата. Асинхронната заявка се изпълнява във фонов режим, така че страницата остава отзивчива и се актуализира, когато данните пристигнат. Ajax използва асинхронния модел.

С fetch, предайте втори метод за задаване на аргументи на POST и тяло, след което прочетете $_POST в PHP. С XMLHttpRequest, извикайте open('POST', url), задайте заглавката Content-Type и изпратете кодираните данни.

CORS, Cross-Origin Resource Sharing (Споделяне на ресурси от различни източници), блокира заявките на браузъра към различен домейн, освен ако този сървър не изпрати правилния заглавен файл Access-Control-Allow-Origin. Добавете заглавния файл от страната на PHP или извикайте same-origin. URL да го поправя.

Да. Поставете кода на XMLHttpRequest и изкуственият интелект може да го пренапише, използвайки базирания на обещания fetch API или axios, да добави обработка на грешки и да запази същото поведение. Тествайте резултата, тъй като обработката на отговорите се различава леко.

Да. Споделете кода на заявката и конзолата на браузъра или мрежовата грешка и изкуственият интелект може да забележи грешка. URL, CORS блок, липсващ параметър или грешка в сървъра, след което предложете решението, което да опитате.

Обобщете тази публикация с: