Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

PHP | ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° массивов

ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° массивов

ПослСднСС обновлСниС: 16.03.2021

Π’ ΠΏΡ€ΠΎΡˆΠ»Ρ‹Ρ… Ρ‚Π΅ΠΌΠ°Ρ… Π±Ρ‹Π»Π° рассмотрСна ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° Π½Π° сСрвСр ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Однако ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° Π½Π°Π±ΠΎΡ€Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ массивов Π² PHP ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ слоТности. Рассмотрим, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π½Π° сСрвСр ΠΈ соотвСтствСнно ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π° сСрвСрС массивы Π΄Π°Π½Π½Ρ‹Ρ….

НапримСр, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ» users.php:


<?php
$users = [];
if(isset($_GET["users"])){
 
    $users = $_GET["users"];
}
echo "Π’ массивС " . count($users) . " элСмСнтa/ΠΎΠ²<br>";
foreach($users as $user) echo "$user<br>";
?>

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ «users», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ пСрСдаСтся Π² запросС Ρ‚ΠΈΠΏΠ° GET, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ массив. И соотвСтствСно ΠΌΡ‹ смоТСм ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· Π½Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ массив эту скрипту, обратимся ΠΊ Π½Π΅ΠΌΡƒ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ запросом:

http://localhost/users.php?users[]=Tom&users[]=Bob&users[]=Sam

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ строки запроса ΠΊΠ°ΠΊ массив, послС названия ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠ²Π°Π΄Ρ€Π°Π½Ρ‹Π΅ скобки []. Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅: users[]=Tom. И сколько Ρ€Π°Π· ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ присвоСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π² массивС. ВсС значСния, ΠΊΠ°ΠΊ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΎΡ‚Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ампСрсандом. Π’Π°ΠΊ, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π² массив ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Ρ‚Ρ€ΠΈ значСния.

ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² запросС POST ΠΈΠ· Ρ„ΠΎΡ€ΠΌΡ‹. НапримСр, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ скрипт:


<!DOCTYPE html>
<html>
<head>
<title>METANIT.COM</title>
<meta charset="utf-8" />
</head>
<body>
<?php
if(isset($_POST["users"])){
	
    $users = $_POST["users"];
	echo "Π’ массивС " . count($users) . " элСмСнтa/ΠΎΠ²<br>";
	foreach($users as $user) echo "$user<br>";
}
?>
<h4>Π€ΠΎΡ€ΠΌΠ° Π²Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ…</h4>
<form method="POST">
    <p>User 1: <input type="text" name="users[]" /></p>
    <p>User 2: <input type="text" name="users[]" /></p>
    <p>User 3: <input type="text" name="users[]" /></p>
    <input type="submit" value="ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ">
</form>
</body>
</html>

Как извСстно, Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π° ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π½Π° сСрвСр Π΄Π°Π½Π½Ρ‹Ρ… соотвСтствуСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° name Ρƒ элСмСнта Ρ„ΠΎΡ€ΠΌΡ‹. И Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для массива, Ρƒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ name поля Π²Π²ΠΎΠ΄Π° Π² качСствС значСния ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ массива с ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ скобками:

<input type="text" name="users[]" />

БоотвСтствСнно, сколько ΠΏΠΎΠ»Π΅ΠΉ Π²Π²ΠΎΠ΄Π° с ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ массива ΠΌΡ‹ ΡƒΠΊΠ°ΠΆΠ΅ΠΌ, ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΌΡ‹ смоТСм ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π½Π° сСрвСр. Π’Π°ΠΊ, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π½Π° сСрвСр пСрСдаСтся Ρ‚Ρ€ΠΈ значСния Π² массивС users:

ΠŸΡ€ΠΈΡ‡Π΅ΠΌ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ примСняСтся ΠΈ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ‚ΠΈΠΏΠ°ΠΌ ΠΏΠΎΠ»Π΅ΠΉ Π²Π²ΠΎΠ΄Π° Ρ„ΠΎΡ€ΠΌΡ‹ html.

ΠŸΡ€ΠΈ этом Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π²Ρ‹ΡˆΠ΅ пСрСдавался ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ массив, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π² качСствС ΠΊΠ»ΡŽΡ‡Π° ΠΈΠΌΠ΅Π΅Ρ‚ числовой индСкс. Π‘ΠΎΠΎΡ‚Π²Π΅Π½Π½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ индСкс, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ элСмСнт массива:


$firstUser = $_POST["users"][0];
echo $firstUser;

Но Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π² элСмСнтах Ρ„ΠΎΡ€ΠΌΡ‹ явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡ΠΈ:


<!DOCTYPE html>
<html>
<head>
<title>METANIT.COM</title>
<meta charset="utf-8" />
</head>
<body>
<?php
if(isset($_POST["users"])){
	
	$firstUser = $_POST["users"]["first"];
	$secondUser = $_POST["users"]["second"];
	$thirdUser = $_POST["users"]["third"];
	echo "$firstUser<br>$secondUser<br>$thirdUser";
}
?>
<h4>Π€ΠΎΡ€ΠΌΠ° Π²Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ…</h4>
<form method="POST">
    <p>User 1: <input type="text" name="users[first]" /></p>
    <p>User 2: <input type="text" name="users[second]" /></p>
    <p>User 3: <input type="text" name="users[third]" /></p>
    <input type="submit" value="ΠžΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ">
</form>
</body>
</html>

НапримСр, ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ добавляСт Π² массив элСмСнт с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ «first»

<input type="text" name="users[first]" />

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π° сСрвСрС ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт:

$firstUser = $_POST["users"]["first"];

ИспользованиС ΠžΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² FormData — Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΡ‹ Π²Π΅Π± API

ΠžΠ±ΡŠΠ΅ΠΊΡ‚Β FormData позволяСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ ΠΏΠ°Ρ€ ΠΊΠ»ΡŽΡ‡/Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΈΡ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡΒ XMLHttpRequest. Β ΠžΠ±ΡŠΠ΅ΠΊΡ‚Β FormDataΒ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠ°Ρ€Β ΠΊΠ»ΡŽΡ‡/Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ нСзависимо ΠΎΡ‚ Ρ„ΠΎΡ€ΠΌ. Π”Π°Π½Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΈ Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ submit()

Β Ρ„ΠΎΡ€ΠΌΡ‹, с установлСнной ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ enctype="multipart/form-data".

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ пустой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Β FormData, Π½Π°ΠΏΠΎΠ»Π½ΠΈΠ² Π΅Π³ΠΎ Π·Π°Ρ‚Π΅ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Β append():

var formData = new FormData();

formData.append("username", "Groucho");
formData.append("accountnum", 123456); 


formData.append("userfile", fileInputElement.files[0]);


var content = '<a><b>hey!</b></a>'; 
var blob = new Blob([content], { type: "text/xml"});

formData.append("webmasterfile", blob);

var request = new XMLHttpRequest();
request.open("POST", "http://foo.com/submitform.php");
request.send(formData);
ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:
Β  Поля «userfile» ΠΈ «webmasterfile» ΠΎΠ±Π° содСрТат Ρ„Π°ΠΉΠ»Ρ‹. Число, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ΅ полю «accountnum» Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ прСобразуСтся Π² строку. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ осущСствляСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌΒ FormData.append()Β (Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Blob, File, ΠΈΠ»ΠΈ строкой: Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ являСтся Π½ΠΈΒ Blob, Π½ΠΈΒ File, Ρ‚ΠΎ ΠΎΠ½ΠΎ автоматичСски прСобразуСтся Π² строку).

Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ созданиС экзСмпляра FormData, содСрТащСго поля «username», «accountnum», «userfile» ΠΈ «webmasterfile». ЭкзСмпляр FormDataΒ Π·Π°Ρ‚Π΅ΠΌ отправляСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Β send()

Β ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° XMLHttpRequest. ПолС «webmasterfile» являСтся экзСмпляром класса Blob. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ класса Blob являСтся Ρ„Π°ΠΉΠ»ΠΎΠΌ-ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, содСрТащим «ΡΡ‹Ρ€Ρ‹Π΅» Π΄Π°Π½Π½Ρ‹Π΅. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°ΠΊΒ Blob Π½Π΅ являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π² Π½Π°Ρ‚ΠΈΠ²Π½ΠΎΠΌ javascript. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΒ File базируСтся Π½Π°Β Blob, наслСдуя Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ Π΅Π³ΠΎ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ² Π² ОБ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса BlobΒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅Β Blob() constructor.

Для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Β FormDatΠ°, содСрТащСго Π΄Π°Π½Π½Ρ‹Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΠΎΡ€ΠΌΡ‹

(<form>) ΠΏΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ Ρ„ΠΎΡ€ΠΌΡƒ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Β FormData:

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: FormData Π±ΡƒΠ΄Π΅Ρ‚Β ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ поля Π²Π²ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ name.

var formData = new FormData(someFormElement);

НапримСр:

var formElement = document.querySelector("form");
var request = new XMLHttpRequest();
request.open("POST", "submitform.php");
request.send(new FormData(formElement));

Π’Ρ‹ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Β FormData послС Π΅Π³ΠΎ создания ΠΈ Π΄ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…:

var formElement = document.querySelector("form");
var formData = new FormData(formElement);
var request = new XMLHttpRequest();
request.
open("POST", "submitform.php"); formData.append("serialnumber", serialNumber++); request.send(formData);

Π’Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΡ‘ΠΌ позволяСт Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² Ρ„ΠΎΡ€ΠΌΡƒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, которая, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ нуТдаСтся Π² дСмонстрации ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ.

Π’Ρ‹ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈΒ FormData. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Β <input> с Ρ‚ΠΈΠΏΠΎΠΌΒ file Π² Ρ„ΠΎΡ€ΠΌΡƒ.

<form enctype="multipart/form-data" method="post" name="fileinfo">
  <label>Your email address:</label>
  <input type="email" autocomplete="on" autofocus name="userid" placeholder="email" required size="32" maxlength="64" /><br />
  <label>Custom file label:</label>
  <input type="text" name="filelabel" size="12" maxlength="32" /><br />
  <label>File to stash:</label>
  <input type="file" name="file" required />
  <input type="submit" value="Stash the file!" />
</form>
<div></div>

Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ смоТСтС ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

var form = document. forms.namedItem("fileinfo");
form.addEventListener('submit', function(ev) {

  var oOutput = document.querySelector("div"),
      oData = new FormData(form);

  oData.append("CustomField", "This is some extra data");

  var oReq = new XMLHttpRequest();
  oReq.open("POST", "stash.php", true);
  oReq.onload = function(oEvent) {
    if (oReq.status == 200) {
      oOutput.innerHTML = "Uploaded!";
    } else {
      oOutput.innerHTML = "Error " + oReq.status + " occurred when trying to upload your file.<br \/>";
    }
  };

  oReq.send(oData);
  ev.preventDefault();
}, false);

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Если для Ρ„ΠΎΡ€ΠΌΡ‹ ΡƒΠΊΠ°Π·Π°Π½ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ method, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ использован ΠΈΠΌΠ΅Π½Π½ΠΎ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° сСрвСр, Π° Π½Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π² Π²Ρ‹Π·ΠΎΠ²Π΅ open()

Π’Ρ‹ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒΒ File ΠΈΠ»ΠΈΒ Blob нСпосрСдствСнно ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ FormData:

data.append("myfile", myBlob, "filename. txt");

ΠœΠ΅Ρ‚ΠΎΠ΄Β append() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ 3ΠΉ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ — Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ добавляСтся Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊΒ Content-Disposition ΠΏΡ€ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ Π½Π° сСрвСр. Если Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ (ΠΈΠ»ΠΈ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π½Π΅ поддСрТиваСтся) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ имя «blob».

Π’Ρ‹ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΒ FormData с jQuery:

var fd = new FormData(document.querySelector("form"));
fd.append("CustomField", "This is some extra data");
$.ajax({
  url: "stash.php",
  type: "POST",
  data: fd,
  processData: false,  
  contentType: false   
});

Как ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ массив Ρ‡Π΅Ρ€Π΅Π· HTML Ρ„ΠΎΡ€ΠΌΡƒ Π² PHP

МоТно ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ нСсколько элСмСнтов Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΈΡ… Π½Π° сСрвСрС Π² Π²ΠΈΠ΄Π΅ массива. Π­Ρ‚ΠΎ дСлаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ манипуляций с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ name.

Π’Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ассоциативный массив:

<form>
    <input type="text" name="product[name]">
    <input type="text" name="product[article]">
    <input type="text" name="product[price]">
    <input type="submit">
</form>

ΠŸΡ€ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ΅ Ρ„ΠΎΡ€ΠΌΡ‹ содСрТимоС $_GET Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ:

Array
(
    [product] => Array
        (
            [name] => НазваниС
            [article] => Артикул
            [price] => Π¦Π΅Π½Π°
        )
)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° этой Ρ„ΠΎΡ€ΠΌΡ‹:

<?php
	if(!empty($_GET['product']))
	{
		// МоТно ΠΏΠ΅Ρ€Π΅Π±Ρ€Π°Ρ‚ΡŒ всС поля
		foreach($_GET['product'] as $k => $v)
			echo "$k : $v <br>";

		// Или ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ полю
		echo $_GET['product']['name'];
	}
?>

<form>
    <input type="text" name="product[name]">
    <input type="text" name="product[article]">
    <input type="text" name="product[price]">
    <input type="submit">
</form>

РазумССтся, ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ числа. А Ссли Π½ΡƒΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ»ΡŽΡ‡ΠΈ шли ΠΏΠΎ порядку, ΠΌΠΎΠΆΠ½ΠΎ просто Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках:

<form>
    <input type="text" name="values[]">
    <input type="text" name="values[]">
    <input type="text" name="values[]">
    <input type="submit">
</form>

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ $_GET Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ:

Array
(
    [values] => Array
        (
            [0] => Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1
            [1] => Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 2
            [2] => Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 3
        )
)

МоТно ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для рСдактирования сразу Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… записСй Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…:

<form>
    <input type="text" name="images[10][title]">
    <input type="text" name="images[10][url]">
    <input type="text" name="images[11][title]">
    <input type="text" name="images[11][url]">
    <input type="submit">
</form>

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° этой Ρ„ΠΎΡ€ΠΌΡ‹:

<?php
	if(!empty($_GET['images']))
	{
		foreach($_GET['images'] as $id => $data)
		{
			echo "ID: $id, ";
			echo "Title: $data[title], ";
			echo "URL: $data[url] <br>";
		}
	}
?>

Π’ ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ поля ΠΈ массивы вмСстС:

<form>
    <input type="text" name="id">
    <input type="text" name="product[name]">
    <input type="text" name="images[15][title]">
    <input type="submit">
</form>

PHP: PHP ΠΈ HTML — Руководство

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ:

1. БущСствуСт php-скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹ΠΉ прямым написанным HTML-ΠΊΠΎΠ΄ΠΎΠΌ) конструируСт HTML-страницу с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ своСй ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ echo Π½Π° основС любого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ основанного Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ² сСрвСра ΠΈΠ»ΠΈ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ….

2. Π­Ρ‚ΠΎΡ‚ сцСнарий php ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… Π² строковых ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ) ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ символы, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠ΄Ρ‹ (новая строка, табуляция …), ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ символы HTML (&, <...) ΠΈ Π½Π΅-ASCII (ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½Ρ‹Π΅) символы.

3. Π­Ρ‚ΠΈ символы, ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΡ‚ ASCII, Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ UTF-8, Π° Ρ‚Π°ΠΊΠΆΠ΅ страница HTML (Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ) *)

4. ЗначСния этих строковых ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… PHP Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ javascript для дальнСйшСй ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ javascript (ΠΈΠ»ΠΈ выставлСния этих Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² HTML)

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ°:

нСбСзопасно PHP-Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² HTML (javascript), ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· символов, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, содСрТащихся Π² Π½ΠΈΡ…, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π΅ΠΈΡΠΏΡ€Π°Π²Π½ΠΎΡΡ‚ΡŒ HTML. Π­Ρ‚ΠΈ строки Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ / экранировании, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ Π² строки Π½Π΅ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΡŽΡ‰ΠΈΡ… символов.

РСшСниС

ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ способов Ρ‚Π°ΠΊΠΎΠ³ΠΎ кодирования. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ каТСтся ΠΌΠ½Π΅ самым простым:
ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ PHP с нСпрСдсказуСмым Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ· ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ Ρ„Π°ΠΉΠ»Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ (ΠΈΠ»ΠΈ ΠΈΠ· ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°):

$ variable = file_get_content (…)

1. ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠΉΡ‚Π΅ всС Π±Π°ΠΉΡ‚Ρ‹ этой строки Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹Π΅ значСния ΠΈ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄ всСми ΠΏΠ°Ρ€Π°ΠΌΠΈ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹Ρ… Ρ†ΠΈΡ„Ρ€%

$ variable_e = preg_replace («/ (..) / «,»% $ 1 «, bin2hex ($ variable))

Новая пСрСмСнная Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ символы% 1234567890abcdefABCDEF (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,% 61% 63% 0a …) ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ бСзопасно Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Π° Π² HTML :

var variable = «» // это НЕ всС люди

Но Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ всС Π΅Ρ‰Π΅ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ исходноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ: *)

var variable = decodeURIComponent (««)

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ совпадаСт с исходным Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ.

*) Π― понятия Π½Π΅ имСю ΠΎ страницах / Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅, ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎΠΉ ΠΎΡ‚ UTF-8, особСнно ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ decodeURIComponent Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Ρƒ мСня Π½Π΅Ρ‚ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… ΠΊΠ°ΠΊ сильно ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅.

Π’ΠΠ˜ΠœΠΠΠ˜Π•: этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ (ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ) нСбСзопасСн ΠΏΡ€ΠΎΡ‚ΠΈΠ² внСдрСния ΠΊΠΎΠ΄Π°. Π― Π½Π°ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ (Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ) Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² зависимости ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ случая.

П.Π‘. Для ΠΎΡ‡Π΅Π½ΡŒ большого количСства Π΄Π°Π½Π½Ρ‹Ρ… я Π±Ρ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π» ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΡ… Π² Ρ„Π°ΠΉΠ» Π½Π° сторонС PHP (file_put_content) ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΡ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ javascript Ρ‡Π΅Ρ€Π΅Π· HTTP-запрос.

Π― ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΠ΄Π½ΠΎΠΉ строки ΠΊΠΎΠ΄Π° ΠΊΠ°ΠΊ Π½Π° сторонС сСрвСра, Ρ‚Π°ΠΊ ΠΈ Π½Π° сторонС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. Π― согласСн с ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ всС chaeacters Π½ΡƒΠΆΠ½ΠΎ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

НС Π½Π°ΡΠ»Π°ΠΆΠ΄Π°ΠΉΡ‚Π΅ΡΡŒ ΠΌΠΎΠΈΠΌ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π³Π»ΡƒΠΏΡ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ идСя ΠΏΠΎΠ»ΡƒΡ‡ΡˆΠ΅

murphy

ΠŸΠ΅Ρ€Π΅Π΄Π°ΠΉΡ‚Π΅ массивы PHP Π² JSON ΠΈ JavaScript с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ json_encode

Ѐункция json_encode PHP ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ Π² Π½Π΅Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² строку JSON, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π·Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ вывСсти Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ JavaScript. ΠœΡ‹ дСмонстрируСм Π½Π° этой страницС ΠΎΠ΄Π½ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ массивы.На Π΄Ρ€ΡƒΠ³ΠΈΡ… страницах ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ использованиС json_encode с ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ массивами ΠΈ скалярными значСниями.

Ѐункция json_encode PHP Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ JSON-эквивалСнт ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π΅ΠΉ значСния, ΠΊΠ°ΠΊ ΠΌΡ‹ дСмонстрируСм здСсь с числСнно индСксированным массивом:

   
 

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ строки JSON с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ json_encode Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ JavaScript ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

   
 

Числовой индСксированный массив PHP прСобразуСтся Π² Π»ΠΈΡ‚Π΅Ρ€Π°Π» массива Π² строкС JSON.Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ массив выводился ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ JSON_FORCE_OBJECT :

   
 

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ строка JSON Π½Π΅ содСрТит ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ², Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚ΡŒ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ JSON_PRETTY_PRINT [1] ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для форматирования Π²Ρ‹Π²ΠΎΠ΄Π° JSON. Π­Ρ‚ΠΎ продСмонстрировано Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ассоциативного массива Π½ΠΈΠΆΠ΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ числСнно индСксированного массива

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ дСмонстрируСтся ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° массива PHP с числовой индСксациСй, состоящСго ΠΈΠ· строковых, числовых, логичСских ΠΈ Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π² json_encode .ΠœΡ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ Π²Ρ‹Π²ΠΎΠ΄ json_encode Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ JavaScript, ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π»ΠΈΡ‚Π΅Ρ€Π°Π» массива:

    
 

ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ доступ ΠΊ элСмСнтам массива. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π±Ρ‹Π»ΠΈ сохранСны, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ старомодном ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ ΠΎΠ½ΠΈ Π±Ρ‹Π»ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Ρ‹ Π² строки.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ассоциативного массива

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ Π²Ρ‹Π²ΠΎΠ΄ ассоциативного массива PHP Π² JavaScript с использованиСм json_encode . ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ассоциативный массив PHP становится Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² JavaScript:

   "JavaScript: ΠΏΠΎΠ»Π½ΠΎΠ΅ руководство",
    "author" => "Дэвид Ѐлэнаган",
    "edition" => 6
);
?>  
 

ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠΏΡ†ΠΈΡŽ JSON_PRETTY_PRINT Π² качСствС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° для json_encode для отобраТСния Π²Ρ‹Π²ΠΎΠ΄Π° Π² ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ свойствам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ синтаксис с Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΈ, ΠΈΠ»ΠΈ синтаксис с ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ скобками: book ['title'] .

А ΠΊΠ°ΠΊ насчСт JSON.parse?

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ JavaScript JSON.parse Π½Π΅ Π±Ρ‹Π» ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.Π₯отя Π½Π΅ всСгда Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ json_encode Ρ‡Π΅Ρ€Π΅Π· синтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ Π½Π° сторонС JavaScript, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ. Π£Π·Π½Π°ΠΉΡ‚Π΅ большС ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° ΠΈ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ JSON.parse.

Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ Π½Π°Ρ‡Π°Π»Ρƒ

Function.prototype.apply () - JavaScript | MDN

ΠœΠ΅Ρ‚ΠΎΠ΄ apply () Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ этим Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ , прСдоставлСнными Π² Π²ΠΈΠ΄Π΅ массива (ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ массиву).

  ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ (thisArg)
ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ (thisArg, argsArray)
  

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹

thisArg

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этот прСдоставил для Π²Ρ‹Π·ΠΎΠ²Π° func .

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ фактичСским Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ: Ссли ΠΌΠ΅Ρ‚ΠΎΠ΄ являСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π² ΠΊΠΎΠ΄Π΅ нСстрогого Ρ€Π΅ΠΆΠΈΠΌΠ°, null ΠΈ undefined Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Π° ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ значСния Π±ΡƒΠ΄ΡƒΡ‚ Π² ΡˆΡ‚ΡƒΡ‡Π½ΠΎΠΉ ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠ΅.Π­Ρ‚ΠΎΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ обязатСлСн.

argsArray Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ

ΠžΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ массиву, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ func , ΠΈΠ»ΠΈ null ΠΈΠ»ΠΈ undefined , Ссли Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ прСдоставлСны Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Начиная с ECMAScript 5, эти Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ массиву, Π° Π½Π΅ массивом. Π‘ΠΌ. НиТС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ совмСстимости с Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠΌ.

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ this ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π₯отя синтаксис этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½ синтаксису call () , Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ call () ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ список Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² , Π° apply () ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ массив Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² .

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Если ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΈΠ»ΠΈ Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ достигнут с использованиСм синтаксиса распространСния массива.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. этот относится ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ (Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ). Π‘ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Π° Π·Π°Ρ‚Π΅ΠΌ ΡƒΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π±Π΅Π· нСобходимости ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ для Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

apply ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆ Π½Π° call () , Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΈΠΏΠ° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π’Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ массив Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² вмСсто списка Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² (ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²). Π‘ apply Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΡ‚Π΅Ρ€Π°Π» массива, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ func .apply (this, ['eat', 'bananas']) ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Array , Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ func .apply (this, new Array ('eat', 'bananas')) .

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° argsArray . Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² - это локальная пСрСмСнная Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для всСх Π½Π΅ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΡ€ΠΈ использовании ΠΌΠ΅Ρ‚ΠΎΠ΄Π° apply .Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ всСх Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

Начиная с ECMAScript 5th Edition, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ массиву. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ свойство length ΠΈ цСлочислСнныС (Β«indexΒ») свойства Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ (0..length - 1) . НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ NodeList ΠΈΠ»ΠΈ настраиваСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ {'length': 2, '0': 'eat', '1': 'bananas'} .

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: МногиС старыС Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Chrome <17 ΠΈ Internet Explorer <9, Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ массивам, ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅.

ИспользованиС apply для добавлСния массива ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ push для добавлСния элСмСнта Π² массив. И ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ push ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ нСсколько элСмСнтов ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

Но Ссли Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΡ‚Π΅ массив Π² push , ΠΎΠ½ фактичСски Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ этот массив ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт, вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ элСмСнты ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ массив Π²Π½ΡƒΡ‚Ρ€ΠΈ массива.

Π§Ρ‚ΠΎ, Ссли это Π½Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ? concat Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² этом случаС, Π½ΠΎ ΠΎΠ½ Π½Π΅ добавляСт ΠΊ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ массиву — вмСсто этого ΠΎΠ½ создаСт ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ массив.

Но Π²Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ массиву … И Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ? ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠ΅Ρ‚Π»ΡŽ? НСуТСли Π½Π΅Ρ‚?

ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² ΠΏΠΎΠΌΠΎΡ‰ΡŒ!

  const array = ['a', 'b'];
константныС элСмСнты = [0, 1, 2];
мноТСство.push.apply (массив, элСмСнты);
console.info (массив);
  

ИспользованиС apply ΠΈ встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

Π£ΠΌΠ½ΠΎΠ΅ использованиС apply позволяСт Π²Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ встроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, вСроятно, Π±Ρ‹Π»ΠΈ Π±Ρ‹ написаны ΠΏΡƒΡ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ массива.

Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ Math.max / Math.min , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для опрСдСлСния максимального / минимального значСния Π² массивС.

 
числа const = [5, 6, 2, 3, 7];


ΠΏΡƒΡΡ‚ΡŒ max = Math.max.apply (null, числа);



let min = Math.min.apply (null, числа);


макс = -Π‘Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ, ΠΌΠΈΠ½ = + Π‘Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ;

for (let i = 0; i  max) {
    макс = числа [я];
  }
  if (числа [i]  

Но Π±ΡƒΠ΄ΡŒΡ‚Π΅ остороТны: ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ рискуСтС ΠΏΡ€Π΅Π²Ρ‹ΡΠΈΡ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π΄Π»ΠΈΠ½Ρ‹ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° JavaScript. ΠŸΠΎΡΠ»Π΅Π΄ΡΡ‚Π²ΠΈΡ примСнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ со слишком большим количСством Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ с Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ дСсятками тысяч Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²) Π²Π°Ρ€ΡŒΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² зависимости ΠΎΡ‚ Π΄Π²ΠΈΠΆΠΊΠ°.(ΠœΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ JavaScriptCore ΠΈΠΌΠ΅Π΅Ρ‚ ТСстко Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€Π΅Π΄Π΅Π» Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² 65536.

Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π΄Π΅Π» (ΠΈ Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π° любого повСдСния Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎ большого стСка) Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½. НСкоторыС Π΄Π²ΠΈΠΆΠΊΠΈ Π²Ρ‹Π΄Π°ΡŽΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Π§Ρ‚ΠΎ Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ опасно, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ количСство Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², фактичСски ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот послСдний случай: Ссли Π±Ρ‹ Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΈΠΌΠ΅Π» ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π² Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° (фактичСскиС ограничСния, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΡˆΠ΅), это Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Ссли Π±Ρ‹ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ 5, 6, 2, 3 Π±Ρ‹Π»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹ Π² , ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, Π° Π½Π΅ ΠΏΠΎΠ»Π½Ρ‹ΠΉ массив.

Если ваш массив Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ вырасти Π΄ΠΎ дСсятков тысяч, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½ΡƒΡŽ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ: ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ свою Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΊ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°ΠΌ массива Π·Π° Ρ€Π°Π·:

  function minOfArray (arr) {
  ΠΏΡƒΡΡ‚ΡŒ min = Π‘Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ;
  ΠΏΡƒΡΡ‚ΡŒ QUANTUM = 32768;

  for (var i = 0, len = arr.length; i  

ИспользованиС ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊ конструкторам Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊ конструкторам Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Java).

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ создадим Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Function с ΠΈΠΌΠ΅Π½Π΅ΠΌ construct , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ массиву, с конструктором вмСсто списка Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ².

  Function.prototype.construct = function (aArgs) {
  let oNew = Object.create (this.prototype);
  this.apply (oNew, aArgs);
  return oNew;
};
  

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования:

  function MyConstructor () {
  for (ΠΏΡƒΡΡ‚ΡŒ nProp = 0; nProp  

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π­Ρ‚ΠΎΡ‚ Π½Π΅Ρ€ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Function.construct Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ собствСнными конструкторами; Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π”Π°Ρ‚Π° , Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€.Π’ этих случаях Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ Function.prototype.bind .

НапримСр, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ с конструктором Date : [2012, 11, 4] ; Π² этом случаС Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅: new (Function.prototype.bind.apply (Date, [null] .concat ([2012, 11, 4]))) () .

Π­Ρ‚ΠΎ Π½Π΅ Π»ΡƒΡ‡ΡˆΠΈΠΉ способ Π΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, ΠΈ, вСроятно, Π΅Π³ΠΎ нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ производствСнной срСдС.

Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ BCD Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· twig Π² javascript

Каким Π±Ρ‹ фантастичСским Π½ΠΈ Π±Ρ‹Π» Twig, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π΅Ρ‰ΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π±Π΅Π· нСбольшой ΠΏΠΎΠΌΠΎΡ‰ΠΈ JavaScript

ИспользованиС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Π΄Π°Π½Π½Ρ‹Ρ… для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ поля

Если Ρƒ вас Π΅ΡΡ‚ΡŒ нСбольшой объСм Π΄Π°Π½Π½Ρ‹Ρ… для совмСстного использования с JavaScript, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π΄Π°Π½Π½Ρ‹Ρ….

Π‘Π½Π°Ρ‡Π°Π»Π° Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π½Π°Π·Π²Π°Π½Π½Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π΄Π°Π½Π½Ρ‹Ρ… ΠΊ элСмСнту.
МнС часто это Π½ΡƒΠΆΠ½ΠΎ Π² Ρ‚Π°ΠΊΠΎΠΌ Ρ†ΠΈΠΊΠ»Π΅:

 
{% для записи Π² записях%}
    
        {{entry.title}}
    
{% endif%}  

❗ Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ шанс ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ " ΠΈΠ»ΠΈ <, Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ escape-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€: ... | e ('html_attr') .

Π—Π°Ρ‚Π΅ΠΌ Π² JavaScript Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ элСмСнты ΠΏΠΎ ΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠΈΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· ΠΈΡ… Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ массив Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ:

 
Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.addEventListener ('DOMContentLoaded', () => {

    
    const entryElements =
        document.querySelectorAll ('[ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€-записи-Π΄Π°Π½Π½Ρ‹Ρ…]');

    
    const entryIds =
        Array.from (entryElements) .map (
            item => item.dataset.entryId
        );

    
    console.log (entryIds);
});


$ (() => {

    
    const $ entryElements = $ ('[ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€-записи-Π΄Π°Π½Π½Ρ‹Ρ…]');

    
    const $ entryIds =
        $ .map ($ entryElements, item => $ (item) .data ('entryId'));

    
    console.log ($ entryIds);
});  

❗ Π›ΡŽΠ±Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… с дСфисами, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌΠΈ послС прСфикса data- , ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Π² camelCase Π² ΠΈΡ… Π½Π°Π±ΠΎΡ€Π΅ Π΄Π°Π½Π½Ρ‹Ρ….Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: data-entry-id = ... прСобразуСтся Π² entryId

Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ… см. Руководство MDN ΠΏΠΎ использованию Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ….

ИспользованиС Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Π΄Π°Π½Π½Ρ‹Ρ… для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ

Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ наш ΠΊΠΎΠ΄ Π² чистотС, ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΡƒΡŽ Ρ‚Π°ΠΊΡ‚ΠΈΠΊΡƒ для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π² JavaScript.

Π£Π»ΠΎΠ²ΠΊΠ° состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² Twig, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² JSON, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JavaScript:

 
{% set entryInfo = {
    id: запись.я Π±Ρ‹,
    title: entry.title,
    ΠΏΠΎΠ΄Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ: entry.showSub? entry.subheading: null,
}%}


...

Π—Π°Ρ‚Π΅ΠΌ Π² JavaScript Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ элСмСнты ΠΏΠΎ ΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ JSON. ΠŸΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π°Π±ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ массив ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²:

 
document.addEventListener ('DOMContentLoaded', () => {

    
    const entryInfoElements =
        document.querySelectorAll ('[информация-Π²Π²ΠΎΠ΄-Π΄Π°Π½Π½Ρ‹Ρ…]');

    
    const entryInfoObjects =
        ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ.ΠΈΠ· (entryInfoElements) .map (
            item => JSON.parse (item.dataset.entryInfo)
        );

    
    console.log (entryInfoObjects);
    
});


$ (() => {

    
    const $ entryInfoElements = $ ('[информация-Π²Π²ΠΎΠ΄-Π΄Π°Π½Π½Ρ‹Ρ…]');

    
    const $ entryInfoObjects =
        $ .map ($ entryInfoElements, item => $ (item) .data ('entryInfo'));

    
    console.log ($ entryInfoObjects);
});  

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π½Π΅ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€

Когда ΠΌΡ‹ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹ΡˆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² JSON, ΠΎΠ½ выглядит Ρ‚Π°ΠΊ:

 
{"id": 1, "title": "... "," ΠΏΠΎΠ΄Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ":" ... "}  

Π’ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΠΎ twig для escape-ΠΊΠΎΠ΄Π° ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ | e ('html_attr') для escape вмСсто | raw . Π­Ρ‚ΠΎ позволяСт Π½Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π²ΠΎΠΊΡ€ΡƒΠ³ значСния Π² нашСм Twig, Π½ΠΎ создаСт большоС количСство Π½Π΅Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°:

 
& # x7B; & quot; id & quot; & # x3A; 1, & quot; title & quot; & # x3A; & quot; ... & quot;, & quot; ΠΏΠΎΠ΄Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ & quot; & # x3A; & quot; ...& quot; & # x7D;  

Π€ΠΈΠ»ΡŒΡ‚Ρ€ raw ΠΎΠ±Ρ€Π΅Π·Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ JSON, Π½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°:

 
{"id": 1, "title": "...", "subheading": "..."}


...

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ‚Π΅Π³ скрипта

Если Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΎΠ±Ρ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅, Π½Π΅ связанныС Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ с элСмСнтом, Ρ‚ΠΎ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ созданиС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ JavaScript Π² Ρ‚Π΅Π³Π΅ скрипта:

  <сцСнарий>

    // Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ для Π²Π°ΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…
    var entryInfo = {
        id: '{{entry.я Π±Ρ‹ }}',
        title: '{{entry.title | e (' js ')}}',
        ΠΏΠΎΠ΄Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ: '{{entry.showSub? entry.subheading | e ('js'): null}} ',
    };

    // Или создайтС ΠΎΠ΄Π½Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ
    var entryTitle = '{{entry.title | e (' js ')}}'

  

Π—Π°Ρ‚Π΅ΠΌ просто Π²ΠΎΠ·ΡŒΠΌΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΎΠΊΠ½Π° Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° Π² JavaScript:

  document.addEventListener ('DOMContentLoaded', () => {

    
    const entryInfo = window.entryInfo;

    
    console.log (entryInfo);
});  

TL; DR

Для Π΄Π°Π½Π½Ρ‹Ρ…, связанных с элСмСнтом

  • Если Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅ Π΄Π°Π½Π½Ρ‹Ρ…
    Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: data-the-name = "... ".
  • Если Ρƒ вас нСсколько ΠΏΠΎΠ»Π΅ΠΉ Π΄Π°Π½Π½Ρ‹Ρ…
    Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ JSON ΠΈ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρƒ Π΄Π°Π½Π½Ρ‹Ρ….

Для ΠΎΠ±ΠΎΠ±Ρ‰Π΅Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… страницы

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π² ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ΅ JSON ΠΈ помСститС ΠΈΡ… Π² Ρ‚Π΅Π³ скрипта.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π°

Π£Ρ‡Π΅Π±Π½ΠΈΠΊ

JSON: запрос Π΄Π°Π½Π½Ρ‹Ρ… API с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JavaScript ΠΈΠ»ΠΈ PHP

JSON ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвСром ΠΈ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ΠΎΠΌ. Π’ΠΎΡ‚ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π² .json строка.

  {
  "name": "Ваня",
  "title": "Π’Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ",
  "Π’Π΅Π±-сайт": ""
}  

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, это ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅. Π£ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ общСдоступныС Ρ„Π°ΠΉΠ»Ρ‹ .json , ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ (API, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ). Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» .json Π³Π΄Π΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π² своСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ Π΄Π°Π½Π½Ρ‹Π΅.

Π“ΠΎΠ»Ρ‹
К Π΄Π°Π½Π½Ρ‹ΠΌ

JSON ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π½Π° ΠΌΠ½ΠΎΠ³ΠΈΡ… языках программирования.Π’ этом руководствС ΠΌΡ‹ ΡƒΠ·Π½Π°Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ JSON с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ PHP ΠΈ JavaScript.

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ трСбования

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ JSON?

JSON ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ J ava S cript O bject N otation. Π­Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅, сохранСнныС Π² Ρ„Π°ΠΉΠ»Π΅ .json , ΠΈ состоят ΠΈΠ· сСрии ΠΏΠ°Ρ€ ΠΊΠ»ΡŽΡ‡ / Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ .

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ любого ΠΊΠ»ΡŽΡ‡Π° JSON ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ строкой, логичСским Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, числом, Π½ΡƒΠ»Π΅ΠΌ, массивом ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ. ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π² JSON Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ.

Π₯отя JSON ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ»ΠΈ массив, JSON - это строка .БСриализованная строка, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·ΠΆΠ΅ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ….

ИспользованиС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· JSON с PHP

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π΅Ρ‚Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ JSON - это просто строка, ΠΌΡ‹ собираСмся Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ JSON Π² строку PHP ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π΅ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с ΠΈΠΌΠ΅Π½Π΅ΠΌ $ data .

  $ data = '{
"name": "Арагорн",
"race": "Π§Π΅Π»ΠΎΠ²Π΅ΠΊ"
} ';  

Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ json_decode () для прСобразования строки JSON Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ PHP.

  $ символ = json_decode ($ data);  

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊ Π½Π΅ΠΌΡƒ доступ ΠΊΠ°ΠΊ ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ PHP.

Π’ΠΎΡ‚ ΠΈ вСсь Ρ„Π°ΠΉΠ».

   имя;  

Π’ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

Доступ ΠΊ ΠΊΠ°Π½Π°Π»Ρƒ JSON ΠΏΠΎ URL-адрСсу

Π‘ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΌΡ‹ помСстим всС Π΄Π°Π½Π½Ρ‹Π΅ JSON Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» .json . Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ содСрТимоС Ρ„Π°ΠΉΠ»Π° вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ Π² Π²ΠΈΠ΄Π΅ строки PHP.

Π’ΠΎΡ‚ ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ data.json .

 ; [
  {
    имя: 'Арагорн',
    раса: 'Π§Π΅Π»ΠΎΠ²Π΅ΠΊ',
  },
  {
    имя: 'ЛСголас',
    раса: 'Π­Π»ΡŒΡ„',
  },
  {
    имя: 'Π“ΠΈΠΌΠ»ΠΈ',
    раса: 'Π“Π½ΠΎΠΌ',
  },
]  

А Π²ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΈΠ·Π²Π»Π΅Ρ‡Π΅ΠΌ эти Π΄Π°Π½Π½Ρ‹Π΅ Π² PHP.

  $ url = 'data.json';
$ data = file_get_contents ($ url);
$ characters = json_decode ($ data);  

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ запись, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ Π½ΠΎΠΌΠ΅Ρ€Ρƒ массива. ΠŸΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ счСт начинаСтся с 0.

  echo $ characters [0] -> имя;  

Π― ΠΌΠΎΠ³Ρƒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊΠΎ всСм Π΄Π°Π½Π½Ρ‹ΠΌ Π² массивС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° foreach .

  foreach (символы $ ΠΊΠ°ΠΊ символ $) {
эхо $ символ-> имя. '
'; }

Π’ΠΎΡ‚ ΠΏΠΎΠ»Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» PHP.

   имя;

foreach (символы $ ΠΊΠ°ΠΊ символ $) {
эхо $ символ-> имя. '
'; }

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

  <Ρ‚Π°Π±Π»ΠΈΡ†Π°>


 Имя 
 Раса 


        
              name; ?> 
              race; ?> 
        


  
Арагорн Π§Π΅Π»ΠΎΠ²Π΅ΠΊ
Π“ΠΈΠΌΠ»ΠΈ ΠšΠ°Ρ€Π»ΠΈΠΊ
ЛСголас Π­Π»ΡŒΡ„

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ синтаксис для foreach , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выглядит ΠΊΠ°ΠΊ foreach (): / * loop * / endforeach; вмСсто foreach () {/ * loop * /} .Π­Ρ‚ΠΎ часто ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ HTML.

ИспользованиС ассоциативных массивов

Π•ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ способ доступа ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ Π² PHP. Если Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΡ‚Π΅ true Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π² json_decode () , Π΄Π°Π½Π½Ρ‹Π΅ станут ассоциативным массивом вмСсто ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки [] вмСсто Ρ‚ΠΎΠ½ΠΊΠΎΠΉ стрСлки -> .

  $ символов = json_decode ($ data, true);  

ВмСсто -> race ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ с ['race'] .

  echo $ characters [0] ['Π³ΠΎΠ½ΠΊΠ°'];  

А Π²ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Ρ†ΠΈΠΊΠ»Ρƒ.

  foreach (символы $ ΠΊΠ°ΠΊ символ $) {
echo $ character ['race']. "\ ΠΏ";
}  

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… массивов

Π”ΠΎ сих ΠΏΠΎΡ€ ΠΌΡ‹ использовали Ρ‚ΠΎΠ»ΡŒΠΊΠΎ JSON-ΠΊΠ°Π½Π°Π»Ρ‹ с ΠΏΠ°Ρ€Π°ΠΌΠΈ ΠΊΠ»ΡŽΡ‡ / Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π½ΠΎ часто встрСчаСтся Π²Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’ΠΎΡ‚ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π·Π°Π½ΡƒΠ΄Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Π½ΠΎΠ²ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ wizards.json .

  [
{
"name": "Π“Π°Ρ€Ρ€ΠΈ ΠŸΠΎΡ‚Ρ‚Π΅Ρ€",
"ΠΏΠ°Π»ΠΎΡ‡ΠΊΠ°": [
{
"core": "ΠΏΠ΅Ρ€ΠΎ фСникса",
"длина": "11 дюймов",
"Π΄Π΅Ρ€Π΅Π²ΠΎ": "ΠΏΠ°Π΄ΡƒΠ±"
}
]
},
{
"name": "Π“Π΅Ρ€ΠΌΠΈΠΎΠ½Π° Π“Ρ€Π΅ΠΉΠ½Π΄ΠΆΠ΅Ρ€",
"ΠΏΠ°Π»ΠΎΡ‡ΠΊΠ°": [
{
"core": "сСрдцС Π΄Ρ€Π°ΠΊΠΎΠ½Π°",
"длина": "10 и 3/4 дюйма",
"Π΄Π΅Ρ€Π΅Π²ΠΎ": "виноградная Π»ΠΎΠ·Π°"
}
]
}
]  

Π Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠ° Ρ„ΠΈΠ΄Π°.

  $ url = 'wizards.json';
$ data = file_get_contents ($ url);
$ wizards = json_decode ($ data, истина);  

ΠœΡ‹ смоТСм ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌΡƒ массиву с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ $ wizard ['key'] [0] ['key'] Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΈΠ»ΠΈ любого Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ числа, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ соотвСтствуСт ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½.

  foreach ($ wizards ΠΊΠ°ΠΊ $ wizard) {
echo $ wizard ['имя']. Β«Π–Π΅Π·Π» Π΅ΡΡ‚ΡŒΒ».
$ wizard ['ΠΏΠ°Π»ΠΎΡ‡ΠΊΠ°'] [0] ['Π΄Π΅Ρ€Π΅Π²ΠΎ']. ','.
$ wizard ['ΠΏΠ°Π»ΠΎΡ‡ΠΊΠ°'] [0] ['Π΄Π»ΠΈΠ½Π°']. ', с'.
$ wizard ['ΠΏΠ°Π»ΠΎΡ‡ΠΊΠ°'] [0] ['ядро'].' основной. 
'; }
  ΠŸΠ°Π»ΠΎΡ‡ΠΊΠ° Π“Π°Ρ€Ρ€ΠΈ ΠŸΠΎΡ‚Ρ‚Π΅Ρ€Π° - ΠΏΠ°Π΄ΡƒΠ±, 11 дюймов, с сСрдцСвиной ΠΈΠ· ΠΏΠ΅Ρ€Π° фСникса.
    Π–Π΅Π·Π» Π“Π΅Ρ€ΠΌΠΈΠΎΠ½Ρ‹ Π“Ρ€Π΅ΠΉΠ½Π΄ΠΆΠ΅Ρ€ - виноградная Π»ΠΎΠ·Π°, 10 ΠΈ 3/4 дюйма, с сСрдСчником Π΄Ρ€Π°ΠΊΠΎΠ½Π°.  

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ массива PHP Π² JSON

Π’Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ json_decode () для прСвращСния JSON Π² PHP, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ PHP Π² JSON с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ json_encode () .

  $ Π΄Π°Π½Π½Ρ‹Π΅ = [
'name' => 'Арагорн',
'race' => 'Π§Π΅Π»ΠΎΠ²Π΅ΠΊ'
];

echo json_encode ($ data);  

ΠœΡ‹ сдСлали массив PHP ΠΈ Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Π΅Π³ΠΎ.Π’ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

  {"имя": "Арагорн", "раса": "Π§Π΅Π»ΠΎΠ²Π΅ΠΊ"}  

ИспользованиС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· JSON с JavaScript

ΠœΡ‹ собираСмся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ JavaScript с ΠΈΠΌΠ΅Π½Π΅ΠΌ data ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ строку JSON.

  var data =
  '[{"name": "Арагорн", "раса": "Π§Π΅Π»ΠΎΠ²Π΅ΠΊ"}, {"name": "Π“ΠΈΠΌΠ»ΠΈ", "раса": "Π“Π½ΠΎΠΌ"}]'  

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ JavaScript, встроСнный Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ JSON.parse () , для дСкодирования строки.

ΠžΡ‚ΡΡŽΠ΄Π° ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΊΠ°ΠΊ ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ JavaScript.

  console.log (Π΄Π°Π½Π½Ρ‹Π΅ [1] .name)  

И ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€ΠΎΠΉΡ‚ΠΈ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†ΠΈΠΊΠ»Π° для .

  для (var i = 0; i  
  Арагорн - Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ.
    Π“ΠΈΠΌΠ»ΠΈ - Π³Π½ΠΎΠΌ.  

Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ просто! Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π°ΠΌ, вСроятно, потрСбуСтся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ JSON ΠΏΠΎ URL-адрСсу. Π•ΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ шаг, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ запрос ΠΊ Ρ„Π°ΠΉΠ»Ρƒ. Π”Π°Π²Π°ΠΉΡ‚Π΅ просто возьмСм ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅ строку JSON ΠΈ помСстим Π΅Π΅ Π² Π΄Π°Π½Π½Ρ‹Π΅ .json .

 ; [
  {
    имя: 'Арагорн',
    раса: 'Π§Π΅Π»ΠΎΠ²Π΅ΠΊ',
  },
  {
    имя: 'Π“ΠΈΠΌΠ»ΠΈ',
    раса: 'Π“Π½ΠΎΠΌ',
  },
]  

Π’Π΅ΠΏΠ΅Ρ€ΡŒ создадим XMLHttpRequest () .

  запрос var = Π½ΠΎΠ²Ρ‹ΠΉ XMLHttpRequest ()  

ΠœΡ‹ ΠΎΡ‚ΠΊΡ€ΠΎΠ΅ΠΌ Ρ„Π°ΠΉΠ» ( data.json ) Ρ‡Π΅Ρ€Π΅Π· запрос GET (URL).

  request.open ('GET', 'data.json', true)  

ΠžΡ‚ΡΡŽΠ΄Π° ΠΌΡ‹ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со всСми нашими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ JSON Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ onload .

  request.onload = function () {
  
}  

НаконСц, ΠΎΡ‚ΠΏΡ€Π°Π²ΡŒΡ‚Π΅ запрос.

Π’ΠΎΡ‚ послСдний ΠΊΠΎΠ΄.

  запрос var = Π½ΠΎΠ²Ρ‹ΠΉ XMLHttpRequest ()

request.open ('ΠŸΠžΠ›Π£Π§Π˜Π’Π¬', 'data.json', истина)

request.onload = function () {
  
  var data = JSON.parse (this.response)

  for (var i = 0; i  

И Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅.

  Арагорн - Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ.Π“ΠΈΠΌΠ»ΠΈ - Π³Π½ΠΎΠΌ.  

ИспользованиС Fetch

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Fetch API, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚ΠΎ ΠΆΠ΅ самоС. ΠŸΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ JavaScript Fetch API для получСния Π΄Π°Π½Π½Ρ‹Ρ… JSON, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΎ Π±ΠΎΠ»Π΅Π΅ простом ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ получСния этих Π΄Π°Π½Π½Ρ‹Ρ….

 
Π²Ρ‹Π±ΠΎΡ€ΠΊΠ° ('./ data.json')
  .then ((ΠΎΡ‚Π²Π΅Ρ‚) => {
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ response.json ()
  })
  .then ((Π΄Π°Π½Π½Ρ‹Π΅) => {
    
    console.log (Π΄Π°Π½Π½Ρ‹Π΅)
  })
  .catch ((err) => {
    
  })  

ИспользованиС jQuery

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΊΠ°Π½Π°Π» JSON с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ простого JavaScript Π½Π΅ Ρ‚Π°ΠΊ ΡƒΠΆ слоТно.