Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ программирования Π½Π° JavaScriptΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 16

Автор ΠœΠ°Ρ€ΠΊ Кан

[x]. массивы Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ ΠΈ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ символов [ ΠΈ ] соотвСтствСнно;

[x]. всС строки Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ";

[x]. символы " Π² строкС Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΊΡ€Π°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ: \".

ΠŸΡ€ΠΎΡ‰Π΅ говоря, строка JSON Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ допустимый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ JavaScript.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ посмотрим Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ синтаксичСский Ρ€Π°Π·Π±ΠΎΡ€ этих Π΄Π°Π½Π½Ρ‹Ρ…. Π’ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΡ‹ создадим просто сцСнарий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сообщит, сколько имССтся ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ², ΠΈ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ ΠΎ Π½ΠΈΡ… ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. НачнСм с вСрсии XML, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ Π½Π΅Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π½ΠΎΠΌΡƒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρƒ ΠΊΠΎΠ΄Π°:


function processingFunction(){ if(oXml.readyState!=4) return; // запрос Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ // Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ здСсь. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ дальшС! }


Когда скрипт ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, запрос XMLHttp Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ XMLHttp ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° для Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° Π΄Π°Π½Π½Ρ‹Ρ…: responseXML ΠΈ responseText. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ с Ρ„Π°ΠΉΠ»ΠΎΠΌ XML, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ responseXML:


function processingFunction(){ if(oXml.readyState!=4) return; var xmlDoc = oXml.responseXML; var contacts = xmlDoc.selectNodes('/xml/contacts/person'); alert('There are '+contacts.length+' contacts!'); for(var i=0; i<contacts.length; i++){ alert('Contact #'+(i+1)+':\n\n'+ 'First Name: '+contacts[i].getAttribute('firstname')+'\n'+ 'Last Name: '+contacts[i].getAttribute('lastname') +'\n'+ 'Phone #: '+contacts[i].getAttribute('phone') +'\n'); } }


Π—Π΄Π΅ΡΡŒ имССтся 3 Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° (alert). Одна сообщаСт, Ρ‡Ρ‚ΠΎ имССтся Π΄Π²Π° ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π°, Π° Π΅Ρ‰Π΅ Π΄Π²Π΅ выводят ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ Π½Π° Ρ‚ΠΎΡ‚ ΠΆΠ΅ сцСнарий, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ тСкст JSON:


function processingFunction(){ if(oXml.readyState!=4) return; var json = eval('('+oXml.responseText+')'); alert('There are '+json.contacts.length+' contacts!'); for(var i=0; i<json.contacts.length; i++){ alert('Contact #'+(i+1)+':\n\n'+ 'First Name: '+json.contacts[i].firstname+'\n'+ 'Last Name: '+json.contacts[i].lastname +'\n'+ 'Phone #: '+json.contacts[i].phone +'\n'); } }


Как ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, строки JSON ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² JavaScript, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ просто Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ Π² JavaScript ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ eval(). Однако это ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Π²Ρ‹ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ довСряСтС источнику Π΄Π°Π½Π½Ρ‹Ρ…. Если это Π½Π΅ Ρ‚Π°ΠΊ (Ссли Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ ΠΈΠ· Π½Π΅ Π²ΠΏΠΎΠ»Π½Π΅ извСстного источника Π΄Π°Π½Π½Ρ‹Ρ…), Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈΡ… Π² цСлях бСзопасности Ρ‡Π΅Ρ€Π΅Π· JSON Parser (Анализатор JSON).

НаконСц ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² любом Π΄Ρ€ΡƒΠ³ΠΎΠΌ простом тСкстовом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ вмСсто XML ΠΈΠ»ΠΈ JSON. Однако Π² этом случаС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ синтаксичСский Π°Π½Π°Π»ΠΈΠ· Π΄Π°Π½Π½Ρ‹Ρ…. Если имССтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΎΠΉ, ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, Ρ‚ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½Ρ‹ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ.

Π§Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ: XML ΠΈΠ»ΠΈ JSON? Π—Π΄Π΅ΡΡŒ Π½Π΅Ρ‚ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ. XML ΠΈΠΌΠ΅Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΎ распространСнный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΈ пСрСносим ΠΏΠΎΡ‡Ρ‚ΠΈ Π½Π° Π»ΡŽΠ±ΡƒΡŽ систСму. Если создаваСмый ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с внСшними источниками, Ρ‚ΠΎ, вСроятно, Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ XML. Однако JSON Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π»Π΅Π³Ρ‡Π΅ для понимания ΠΈ Π² ΠΎΠ±Ρ‰Π΅ΠΌ ΠΎΠ½ быстрСС для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠΎΠ΄Π°, Ρ‡Π΅ΠΌ XML. Если эта тСхнология примСняСтся для ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ Π² Π½Π°Ρ‡Π°Π»Π΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ прилоТСниям, Ρ‚ΠΎ JSON ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ заслуТиваСт рассмотрСния.

Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ всС, Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ для создания ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ AJAX, Π½ΠΎ ΠΌΡ‹ рассмотрим достаточно простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€. ΠœΡ‹ собираСмся Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π΅Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… (data grid), которая ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² JSON. Для простоты эти Ρ„Π°ΠΉΠ»Ρ‹ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΈ сгСнСрированы. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ эти Ρ„Π°ΠΉΠ»Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ скорСС всСго Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сСрвСрного сцСнария.

Π€Π°ΠΉΠ» 1


{contacts:[ {"firstname":"Steve" ,"lastname":"Smith", "phone":"555-1212"}, {"firstname":"Joe" ,"lastname":"Stevens", "phone":"555-0193"}, {"firstname":"Sam" ,"lastname":"Smith", "phone":"555-5120"}, {"firstname":"Dave" ,"lastname":"Stevens", "phone":"555-0521"}, {"firstname":"Suzy" ,"lastname":"Smith", "phone":"555-9410"}, {"firstname":"Jessica" ,"lastname":"Stevens", "phone":"555-8521"}, {"firstname":"James" ,"lastname":"Smith", "phone":"555-4781"}, {"firstname":"Jacob" ,"lastname":"Stevens", "phone":"555-9281"}, {"firstname":"Alex" ,"lastname":"Smith", "phone":"555-7261"}, {"firstname":"Tam" ,"lastname":"Stevens", "phone":"555-1820"} ]}


Π€Π°ΠΉΠ» 2


{contacts:[ {"firstname":"Nancy" ,"lastname":"Smith", "phone":"555-9583"}, {"firstname":"Elane" ,"lastname":"Stevens", "phone":"555-7281"}, {"firstname":"Shawn" ,"lastname":"Smith", "phone":"555-5782"}, {"firstname":"Jessie" ,"lastname":"Stevens", "phone":"555-7312"}, {"firstname":"Matt" ,"lastname":"Smith", "phone":"555-4928"}, {"firstname":"Jason" ,"lastname":"Stevens", "phone":"555-3917"}, {"firstname":"Daniel" ,"lastname":"Smith", "phone":"555-8711"}, {"firstname":"Shannon" ,"lastname":"Stevens", "phone":"555-0912"}, {"firstname":"Diana" ,"lastname":"Smith", "phone":"555-6172"}, {"firstname":"Mark" ,"lastname":"Stevens", "phone":"555-8831"} ]}


Π€Π°ΠΉΠ» 3


{contacts:[ {"firstname":"Laura" ,"lastname":"Stevens", "phone":"555-3915"}, {"firstname":"Jeff" ,"lastname":"Smith", "phone":"555-8614"}, {"firstname":"Frank" ,"lastname":"Stevens", "phone":"555-0213"}, {"firstname":"Elizabeth" ,"lastname":"Smith", "phone":"555-7531"}, {"firstname":"Jim" ,"lastname":"Stevens", "phone":"555-3951"} ]}


Π­Ρ‚ΠΈ Ρ„Π°ΠΉΠ»Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ всС Π΄Π°Π½Π½Ρ‹Π΅ для нашСго списка ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ² Π½Π° AJAX. ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ списка ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ² являСтся Π² Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π²ΠΏΠΎΠ»Π½Π΅ простым: создаСтся Ρ‚Π°Π±Π»ΠΈΡ†Π° TABLE для хранСния всСх ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ² ΠΈ функция для очищСния ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ заполнСния этой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π’ΠΎΡ‚ ΠΈ всС.


<table cellspacing="1" cellpadding="3" bgcolor="#000000" style="font-family:tahoma;font-size:10px;"> <tbody id="contactListTable"> <tr style="background-color:#CCF;"> <th>First Name</th> <th>Last Name</th> <th>Phone #</th> </tr> </tbody> </table> function loadContactListPage(n){ var oXML = getXMLHttpObj(); oXML.open('GET', '/img/10_json_file'+n+'.txt', true); oXML.onreadystatechange = function(){ doneLoading(oXML); } oXML.send(''); } function doneLoading(oXML){ if(oXML.readyState!=4) return; var json = eval('('+oXML.responseText+')'); var table = document.getElementById('contactListTable'); for(var i=table.childNodes.length-1; i>0; i--){ table.removeChild(table.childNodes[i]); } for(var i=0; i<json.contacts.length; i++){ var tr = document.createElement('TR'); var td1 = document.createElement('TD'); var td2 = document.createElement('TD'); var td3 = document.createElement('TD'); tr.style.backgroundColor = i%2?'#FFF':'#E6E6E6'; table.appendChild(tr); tr.appendChild(td1); tr.appendChild(td2); tr.appendChild(td3); td1.appendChild(document.createTextNode(json.contacts[i].firstname)); td2.appendChild(document.createTextNode(json.contacts[i].lastname)); td3.appendChild(document.createTextNode(json.contacts[i].phone)); } }


ДСмонстрационный ΠΏΡ€ΠΈΠΌΠ΅Ρ€


First Name Last Name Phone # Steve Smith 555-1212 Joe Stevens 555-0193 Sam Smith 555-5120 Dave Stevens 555-0521 Suzy Smith 555-9410 Jessica Stevens 555-8521 James Smith 555-4781 Jacob Stevens 555-9281 Alex Smith 555-7261 Tam Stevens 555-1820 Page 1 | Page 2 | Page 3


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

AJAX ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ инструмСнтом. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ„ΠΎΡ€ΠΌ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ… ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ, для извлСчСния Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΊ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΠΈΠ»ΠΈ для Ρ‡Π΅Π³ΠΎ-Ρ‚ΠΎ Π΅Ρ‰Π΅, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ. Однако Π² Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ ситуации ΠΎΠ½ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ основным элСмСнтом Web-сайта. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π°Π΄ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎ сайт Π±ΡƒΠ΄Π΅Ρ‚ доступСн, Π΄Π°ΠΆΠ΅ Ссли JavaScript Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½, Π½ΠΎ всСгда ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ для этого ΠΏΡ€Π°Π²ΠΈΠ»Π°.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ лСкция Π±ΡƒΠ΄Π΅Ρ‚ посвящСна ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ошибок Π² JavaScript.

ЛСкция 11. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок Π² JavaScript

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок Π² JavaScript: БинтаксичСскиС ошибки. Ошибки Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния. Window.onerror. Try/Catch/Finally ΠΈ Throw. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ошибок Π² AJAX

Π’Ρ‹ написали ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ JavaScript, ΠΈ ΠΎΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ - ΠΏΠΎΠΊΠ° Π²Ρ‹ Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ сообщСниС ΠΎΠ± ошибкС. Π­Ρ‚ΠΎ Π½Π΅Ρ‡Ρ‚ΠΎ нСприглядноС, Π²Ρ‹ΡΠΊΠ°ΠΊΠΈΠ²Π°ΡŽΡ‰Π΅Π΅ Π½Π° экранС, Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π²Ρ€ΠΎΠ΄Π΅ 'myObject.fields is null or not an object'. Π§Ρ‚ΠΎ это Π·Π½Π°Ρ‡ΠΈΡ‚? Π’ этом ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ рассмотрим, ΠΊΠ°ΠΊ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ ошибок, ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² для ΠΎΠ±Ρ‰Π΅ΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок.

JavaScript ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° основных уровня ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибок: синтаксичСскиС ошибки ΠΈ ошибки Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния. БинтаксичСскиС ошибки Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Π΄ΠΎ выполнСния ΠΊΠΎΠ΄Π° JavaScript, означая Π² основном, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π’ΠΎΠ·ΡŒΠΌΠ΅ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:


for(var i=0; i<10; i++) // Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ΠΊΠΎΠ΄ здСсь }


ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ здСсь ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π°Ρ скобка {. Если ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ этот ΠΊΠΎΠ΄, Ρ‚ΠΎ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ появится сообщСниС ΠΎΠ± ошибкС, Π΄Π°ΠΆΠ΅ Ссли ΠΊΠΎΠ΄ находится Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая Π½Π΅ выполняСтся сразу. Π’Π°ΠΊΠΈΠ΅ ошибки ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда Π»Π΅Π³ΠΊΠΎ находятся ΠΈ ΠΈΡΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ. Π’ этом случаС Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΎ сообщСниС, говорящСС Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ " ОТидалась ')', строка 10, позиция 18". Если ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ строкС 10, Ρ‚ΠΎ Ρ‚Π°ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ достаточно очСвидная ошибка, такая, ΠΊΠ°ΠΊ пропущСнная ), Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π·Π½Π°ΠΊ <ΠΈΠ»ΠΈ какая-Ρ‚ΠΎ другая ΠΎΠΏΠ΅Ρ‡Π°Ρ‚ΠΊΠ°. Π‘ Ρ‚Π°ΠΊΠΈΠΌΠΈ ошибками Π½ΠΈΡ‡Π΅Π³ΠΎ нСльзя ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΊΡ€ΠΎΠΌΠ΅ ΠΊΠ°ΠΊ просто ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΈ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ дальшС. НиТС прСдставлСн список Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнных синтаксичСских ошибок:

[x]. ΠŸΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΈΠ»ΠΈ Π½Π΅ΠΏΠ°Ρ€Π½Ρ‹Π΅ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅, ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ ΠΈΠ»ΠΈ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки

КаТдая фигурная {, круглая (, ΠΈΠ»ΠΈ квадратная [ скобка Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ свою Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΡƒΡŽ ΠΏΠ°Ρ€Π½ΡƒΡŽ скобку. Если ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ скобки, Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹ ΠΏΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ внСшниС. НапримСр, Π½Π°Π±ΠΎΡ€ скобок {[}] являСтся нСдопустимым.