AJAX - Hızlı Kılavuz
AJAX, Asenkron JavaScript ve XML. AJAX, XML, HTML, CSS ve Java Script yardımıyla daha iyi, daha hızlı ve daha etkileşimli web uygulamaları oluşturmak için yeni bir tekniktir.
Ajax, dinamik içerik görüntüleme için Belge Nesne Modeli ve JavaScript ile birlikte içerik için XHTML, sunum için CSS kullanır.
Geleneksel web uygulamaları, eşzamanlı talepleri kullanarak sunucuya ve sunucudan bilgi iletir. Bu, bir formu doldurduğunuz, gönder düğmesine bastığınız ve sunucudan gelen yeni bilgilerle yeni bir sayfaya yönlendirildiğiniz anlamına gelir.
AJAX ile gönder düğmesine bastığınızda, JavaScript sunucuya bir istekte bulunur, sonuçları yorumlar ve mevcut ekranı günceller. En saf anlamda, kullanıcı sunucuya herhangi bir şeyin iletildiğini asla bilemezdi.
XML, sunucu verilerini almak için format olarak yaygın şekilde kullanılır, ancak düz metin dahil herhangi bir format da kullanılabilir.
AJAX, web sunucusu yazılımından bağımsız bir web tarayıcı teknolojisidir.
İstemci programı arka planda sunucudan bilgi talep ederken, kullanıcı uygulamayı kullanmaya devam edebilir.
Sezgisel ve doğal kullanıcı etkileşimi. Tıklama gerekli değildir, fare hareketi yeterli bir olay tetikleyicisidir.
Sayfa güdümlü yerine veriye dayalı.
Zengin İnternet Uygulama Teknolojisi
AJAX, şimdiye kadarki en geçerli Zengin İnternet Uygulaması (RIA) teknolojisidir. Muazzam bir endüstri ivmesi kazanıyor ve birkaç araç kiti ve çerçeve ortaya çıkıyor. Ancak aynı zamanda, AJAX tarayıcı uyumsuzluğuna sahiptir ve bakımı ve hata ayıklaması zor olan JavaScript tarafından desteklenmektedir.
AJAX Açık Standartlara Dayanmaktadır
AJAX, aşağıdaki açık standartlara dayanmaktadır -
- HTML ve Basamaklı Stil Sayfaları (CSS) kullanan tarayıcı tabanlı sunum.
- Veriler XML biçiminde saklanır ve sunucudan alınır.
- Tarayıcıda XMLHttpRequest nesnelerini kullanarak sahne arkası verileri alır.
- Her şeyin gerçekleşmesi için JavaScript.
AJAX bağımsız olarak çalışamaz. Etkileşimli web sayfaları oluşturmak için diğer teknolojilerle birlikte kullanılır.
JavaScript
- Serbest yazılan komut dosyası dili.
- JavaScript işlevi, bir sayfada bir olay meydana geldiğinde çağrılır.
- Tüm AJAX işlemi için yapıştırıcı.
DOM
- Yapılandırılmış belgelere erişmek ve bunları değiştirmek için API.
- XML ve HTML belgelerinin yapısını temsil eder.
CSS
- Sunum stilinin içerikten net bir şekilde ayrılmasına izin verir ve JavaScript ile programla değiştirilebilir
XMLHttpRequest
- Sunucuyla eşzamansız etkileşim gerçekleştiren JavaScript nesnesi.
AJAX'ı kullanan bazı ünlü web uygulamalarının listesi burada.
Google Maps
Bir kullanıcı, bir düğmeye tıklamak yerine fareyi kullanarak tüm haritayı sürükleyebilir.
https://maps.google.com/
Google Suggest
Siz yazarken Google öneriler sunar. Sonuçlarda gezinmek için ok tuşlarını kullanın.
https://www.google.com/webhp?complete=1&hl=en
Gmail
Gmail, e-postaların daha sezgisel, verimli ve kullanışlı olabileceği fikri üzerine kurulmuş bir web postasıdır.
https://gmail.com/
Yahoo Haritalar (yeni)
Artık gittiğin yere ulaşmak daha da kolay ve daha eğlenceli!
https://maps.yahoo.com/
AJAX ve Geleneksel CGI Programı arasındaki fark
Bu iki örneği tek tek deneyin, farkı hissedeceksiniz. AJAX örneğini denerken süreksizlik yoktur ve yanıtı çok hızlı alırsınız, ancak standart GCI örneğini denediğinizde yanıtı beklemeniz gerekir ve sayfanız da yenilenir.
AJAX Örneği
Standart Örnek
NOTE- AJAX Veritabanında daha karmaşık bir örnek verdik .
Mevcut tüm tarayıcılar AJAX'ı destekleyemez. AJAX'ı destekleyen başlıca tarayıcıların listesi aşağıda verilmiştir.
- Mozilla Firefox 1.0 ve üstü.
- Netscape 7.1 ve sonraki sürümler.
- Apple Safari 1.2 ve üzeri.
- Microsoft Internet Explorer 5 ve üzeri.
- Konqueror.
- Opera 7.6 ve üzeri.
Bir sonraki uygulamanızı yazarken, AJAX'ı desteklemeyen tarayıcıları göz önünde bulundurun.
NOTE - Bir tarayıcının AJAX'ı desteklemediğini söylediğimizde, bu sadece tarayıcının Javascript nesnesinin - XMLHttpRequest nesnesinin - oluşturulmasını desteklemediği anlamına gelir.
Tarayıcıya Özel Kod Yazma
Kaynak kodunuzu bir tarayıcıyla uyumlu hale getirmenin en basit yolu , JavaScript'inizde try ... catch bloklarını kullanmaktır .
<html>
<body>
<script language = "javascript" type = "text/javascript">
<!--
//Browser Support Code
function ajaxFunction() {
var ajaxRequest; // The variable that makes Ajax possible!
try {
// Opera 8.0+, Firefox, Safari
ajaxRequest = new XMLHttpRequest();
} catch (e) {
// Internet Explorer Browsers
try {
ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
// Something went wrong
alert("Your browser broke!");
return false;
}
}
}
}
//-->
</script>
<form name = 'myForm'>
Name: <input type = 'text' name = 'username' /> <br />
Time: <input type = 'text' name = 'time' />
</form>
</body>
</html>
Yukarıdaki JavaScript kodunda, XMLHttpRequest nesnemizi yapmak için üç kez deniyoruz. İlk denememiz -
- ajaxRequest = new XMLHttpRequest ();
Opera 8.0+, Firefox ve Safari tarayıcıları içindir. Başarısız olursa, bir Internet Explorer tarayıcısı için doğru nesneyi yapmak için iki kez daha deneriz -
- ajaxRequest = new ActiveXObject ("Msxml2.XMLHTTP");
- ajaxRequest = new ActiveXObject ("Microsoft.XMLHTTP");
Çalışmazsa, XMLHttpRequest'i desteklemeyen çok eski bir tarayıcı kullanabiliriz, bu da AJAX'ı desteklemediği anlamına gelir.
Büyük olasılıkla, ajaxRequest değişkenimiz , tarayıcının kullandığı XMLHttpRequest standardına göre ayarlanacaktır ve sunucuya veri göndermeye başlayabiliriz. Adım adım AJAX iş akışı sonraki bölümde açıklanmaktadır.
Bu bölüm, AJAX işleminin tam adımlarının net bir resmini verir.
AJAX İşleminin Adımları
- Bir müşteri olayı meydana gelir.
- Bir XMLHttpRequest nesnesi oluşturulur.
- XMLHttpRequest nesnesi yapılandırılır.
- XMLHttpRequest nesnesi, Web sunucusuna zaman uyumsuz bir istekte bulunur.
- Web sunucusu, XML belgesini içeren sonucu döndürür.
- XMLHttpRequest nesnesi callback () işlevini çağırır ve sonucu işler.
- HTML DOM güncellenir.
Gelin bu adımları tek tek atalım.
Bir İstemci Olayı Oluşur
Bir olayın sonucu olarak bir JavaScript işlevi çağrılır.
Örnek - validateUserId () JavaScript işlevi, kimliği "userid" olarak ayarlanmış giriş formu alanındaki bir onkeyup olayına bir olay işleyicisi olarak eşlenir
<input type = "text" size = "20" id = "userid" name = "id" onkeyup = "validateUserId ();">.
XMLHttpRequest Nesnesi Oluşturuldu
var ajaxRequest; // The variable that makes Ajax possible!
function ajaxFunction() {
try {
// Opera 8.0+, Firefox, Safari
ajaxRequest = new XMLHttpRequest();
} catch (e) {
// Internet Explorer Browsers
try {
ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
// Something went wrong
alert("Your browser broke!");
return false;
}
}
}
}
XMLHttpRequest Nesnesi Yapılandırıldı
Bu adımda, istemci olayı tarafından tetiklenecek bir fonksiyon yazacağız ve bir geri çağırma fonksiyonu processRequest () kaydedilecektir.
function validateUserId() {
ajaxFunction();
// Here processRequest() is the callback function.
ajaxRequest.onreadystatechange = processRequest;
if (!target) target = document.getElementById("userid");
var url = "validate?id=" + escape(target.value);
ajaxRequest.open("GET", url, true);
ajaxRequest.send(null);
}
Web sunucusuna Eşzamansız İstek Yapma
Kaynak kodu, yukarıdaki kod parçasında mevcuttur. Kalın yazı tipiyle yazılan kod, web sunucusuna bir istekte bulunmaktan sorumludur. Tüm bunlar XMLHttpRequest nesnesi ajaxRequest kullanılarak yapılıyor .
function validateUserId() {
ajaxFunction();
// Here processRequest() is the callback function.
ajaxRequest.onreadystatechange = processRequest;
if (!target) target = document.getElementById("userid"); var url = "validate?id = " + escape(target.value); ajaxRequest.open("GET", url, true); ajaxRequest.send(null);
}
Kullanıcı kimliği kutusuna Zara yazdığınızı varsayın, ardından yukarıdaki istekte URL "validate? İd = Zara" olarak ayarlanır.
Web sunucusu XML Belgesi İçeren Sonucu Döndürür
Sunucu tarafı komut dosyanızı herhangi bir dilde uygulayabilirsiniz, ancak mantığı aşağıdaki gibi olmalıdır.
- Müşteriden bir istek alın.
- İstemciden gelen girdiyi ayrıştırın.
- Gerekli işlemi yapın.
- Çıktıyı istemciye gönderin.
Bir sunucu uygulaması yazacağınızı varsayarsak, işte kod parçası.
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws IOException, ServletException {
String targetId = request.getParameter("id");
if ((targetId != null) && !accounts.containsKey(targetId.trim())) {
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-cache");
response.getWriter().write("<valid>true</valid>");
} else {
response.setContentType("text/xml");
response.setHeader("Cache-Control", "no-cache");
response.getWriter().write("<valid>false</valid>");
}
}
Geri Arama İşlevi processRequest () Çağrıldı
XMLHttpRequest nesnesi için bir durum değişikliği olduğunda ProcessRequest () işlev çağrısı için yapılandırılmış readyState arasında XMLHttpRequest nesne. Şimdi bu işlev sonucu sunucudan alacak ve gerekli işlemleri yapacaktır. Aşağıdaki örnekte olduğu gibi, Web sunucusundan döndürülen değere göre bir değişken mesajını doğru veya yanlış olarak ayarlar.
function processRequest() {
if (req.readyState == 4) {
if (req.status == 200) {
var message = ...;
...
}
HTML DOM Güncellendi
Bu son adımdır ve bu adımda HTML sayfanız güncellenecektir. Aşağıdaki şekilde olur -
- JavaScript, DOM API kullanarak bir sayfadaki herhangi bir öğeye referans alır.
- Bir elemana referans almanın önerilen yolu çağırmaktır.
document.getElementById("userIdMessage"),
// where "userIdMessage" is the ID attribute
// of an element appearing in the HTML document
JavaScript artık elementin niteliklerini değiştirmek için kullanılabilir; öğenin stil özelliklerini değiştirebilir; veya alt öğeleri ekleyin, kaldırın veya değiştirin. İşte bir örnek -
<script type = "text/javascript">
<!--
function setMessageUsingDOM(message) {
var userMessageElement = document.getElementById("userIdMessage");
var messageText;
if (message == "false") {
userMessageElement.style.color = "red";
messageText = "Invalid User Id";
} else {
userMessageElement.style.color = "green";
messageText = "Valid User Id";
}
var messageBody = document.createTextNode(messageText);
// if the messageBody element has been created simple
// replace it otherwise append the new element
if (userMessageElement.childNodes[0]) {
userMessageElement.replaceChild(messageBody, userMessageElement.childNodes[0]);
} else {
userMessageElement.appendChild(messageBody);
}
}
-->
</script>
<body>
<div id = "userIdMessage"><div>
</body>
Yukarıda belirtilen yedi adımı anladıysanız, AJAX ile neredeyse işiniz bitti demektir. Sonraki bölümde XMLHttpRequest nesnesini daha detaylı göreceğiz .
XMLHttpRequest nesnesi, AJAX'ın anahtarıdır. Temmuz 2000'de Internet Explorer 5.5 piyasaya sürüldüğünden beri mevcuttu, ancak 2005'te AJAX ve Web 2.0 popüler hale gelene kadar tam olarak keşfedilmemişti.
XMLHttpRequest (XHR), bir web sayfasının İstemci Tarafı ve Sunucu Tarafı.
XMLHttpRequest çağrılarından döndürülen veriler genellikle arka uç veritabanları tarafından sağlanacaktır. XML'in yanı sıra, XMLHttpRequest, JSON veya hatta düz metin gibi diğer formatlarda veri almak için kullanılabilir.
XMLHttpRequest nesnesinin nasıl oluşturulacağına dair birkaç örnek gördünüz.
Aşina olmanız gereken yöntem ve özelliklerden bazıları aşağıda listelenmiştir.
XMLHttpRequest Yöntemleri
abort()
Mevcut talebi iptal eder.
getAllResponseHeaders()
HTTP üstbilgilerinin tamamını bir dizge olarak döndürür.
getResponseHeader( headerName )
Belirtilen HTTP başlığının değerini döndürür.
open( method, URL )
open( method, URL, async )
open( method, URL, async, userName )
open( method, URL, async, userName, password )
Bir isteğin yöntemini, URL'sini ve diğer isteğe bağlı özniteliklerini belirtir.
Yöntem parametresi "GET", "POST" veya "HEAD" değerine sahip olabilir. "PUT" ve "DELETE" gibi diğer HTTP yöntemleri (esas olarak REST uygulamalarında kullanılır) mümkün olabilir.
"Eşzamansız" parametresi, isteğin eşzamansız olarak işlenip işlenmeyeceğini belirtir. "true", komut dosyası işlemenin send () yönteminden sonra yanıt beklemeden devam ettiği ve "yanlış" komut dosyasının komut dosyası işlemeye devam etmeden önce yanıt beklediği anlamına gelir.
send( content )
İsteği gönderir.
setRequestHeader( label, value )
Gönderilecek HTTP başlığına bir etiket / değer çifti ekler.
XMLHttpRequest Özellikleri
onreadystatechange
Her durum değişikliğinde tetiklenen bir olay için olay işleyicisi.
readyState
ReadyState özelliği, XMLHttpRequest nesnesinin geçerli durumunu tanımlar.
Aşağıdaki tablo readyState özelliği için olası değerlerin bir listesini sağlar -
Durum | Açıklama |
---|---|
0 | İstek başlatılmadı. |
1 | İstek oluşturuldu. |
2 | İstek gönderildi. |
3 | Talep işleniyor. |
4 | Talep tamamlandı. |
readyState = 0 XMLHttpRequest nesnesini oluşturduktan sonra, ancak open () yöntemini çağırmadan önce.
readyState = 1 Open () yöntemini çağırdıktan sonra, ancak send () çağırmadan önce.
readyState = 2 Send () çağırdıktan sonra.
readyState = 3 Tarayıcı, sunucuyla bir iletişim kurduktan sonra, ancak sunucu yanıtı tamamlamadan önce.
readyState = 4 İstek tamamlandıktan ve yanıt verisi tamamen sunucudan alındıktan sonra.
responseText
Yanıtı bir dizge olarak döndürür.
responseXML
Yanıtı XML olarak döndürür. Bu özellik, W3C DOM düğüm ağacı yöntemleri ve özellikleri kullanılarak incelenip ayrıştırılabilen bir XML belge nesnesi döndürür.
status
Durumu sayı olarak döndürür (örneğin, "Bulunamadı" için 404 ve "Tamam" için 200).
statusText
Durumu bir dizge olarak döndürür (ör. "Bulunamadı" veya "Tamam").
AJAX kullanarak bir veritabanındaki bilgilere erişmenin ne kadar kolay olduğunu açıkça göstermek için, anında MySQL sorguları oluşturacağız ve sonuçları "ajax.html" üzerinde görüntüleyeceğiz. Ama devam etmeden önce zemin işini yapalım. Aşağıdaki komutu kullanarak bir tablo oluşturun.
NOTE - Aşağıdaki MySQL işlemlerini gerçekleştirmek için yeterli yetkiye sahip olduğunuzu varsayıyoruz.
CREATE TABLE 'ajax_example' (
'name' varchar(50) NOT NULL,
'age' int(11) NOT NULL,
'sex' varchar(1) NOT NULL,
'wpm' int(11) NOT NULL,
PRIMARY KEY ('name')
)
Şimdi aşağıdaki SQL ifadelerini kullanarak aşağıdaki verileri bu tabloya boşaltın -
INSERT INTO 'ajax_example' VALUES ('Jerry', 120, 'm', 20);
INSERT INTO 'ajax_example' VALUES ('Regis', 75, 'm', 44);
INSERT INTO 'ajax_example' VALUES ('Frank', 45, 'm', 87);
INSERT INTO 'ajax_example' VALUES ('Jill', 22, 'f', 72);
INSERT INTO 'ajax_example' VALUES ('Tracy', 27, 'f', 0);
INSERT INTO 'ajax_example' VALUES ('Julie', 35, 'f', 90);
İstemci Tarafı HTML Dosyası
Şimdi, ajax.html olan istemci tarafı HTML dosyamıza sahip olalım ve aşağıdaki koda sahip olacaktır -
<html>
<body>
<script language = "javascript" type = "text/javascript">
<!--
//Browser Support Code
function ajaxFunction() {
var ajaxRequest; // The variable that makes Ajax possible!
try {
// Opera 8.0+, Firefox, Safari
ajaxRequest = new XMLHttpRequest();
} catch (e) {
// Internet Explorer Browsers
try {
ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
// Something went wrong
alert("Your browser broke!");
return false;
}
}
}
// Create a function that will receive data
// sent from the server and will update
// div section in the same page.
ajaxRequest.onreadystatechange = function() {
if(ajaxRequest.readyState == 4) {
var ajaxDisplay = document.getElementById('ajaxDiv');
ajaxDisplay.innerHTML = ajaxRequest.responseText;
}
}
// Now get the value from user and pass it to
// server script.
var age = document.getElementById('age').value;
var wpm = document.getElementById('wpm').value;
var sex = document.getElementById('sex').value;
var queryString = "?age = " + age ;
queryString += "&wpm = " + wpm + "&sex = " + sex;
ajaxRequest.open("GET", "ajax-example.php" + queryString, true);
ajaxRequest.send(null);
}
//-->
</script>
<form name = 'myForm'>
Max Age: <input type = 'text' id = 'age' /> <br />
Max WPM: <input type = 'text' id = 'wpm' /> <br />
Sex:
<select id = 'sex'>
<option value = "m">m</option>
<option value = "f">f</option>
</select>
<input type = 'button' onclick = 'ajaxFunction()' value = 'Query MySQL'/>
</form>
<div id = 'ajaxDiv'>Your result will display here</div>
</body>
</html>
NOTE - Sorgudaki değişkenleri aktarmanın yolu HTTP standardına göredir ve formA'ya sahiptir.
URL?variable1 = value1;&variable2 = value2;
Yukarıdaki kod size aşağıda verildiği gibi bir ekran verecektir -
Girişinizi yaptıktan sonra sonucunuz bu bölümde burada görüntülenecektir.
NOTE - Bu sahte bir ekran.
Sunucu Tarafı PHP Dosyası
İstemci tarafı komut dosyanız hazır. Şimdi, veritabanından yaş, wpm ve cinsiyeti alacak ve müşteriye geri gönderecek olan sunucu tarafı betiğimizi yazmalıyız. Aşağıdaki kodu "ajax-example.php" dosyasına koyun.
<?php
$dbhost = "localhost"; $dbuser = "dbusername";
$dbpass = "dbpassword"; $dbname = "dbname";
//Connect to MySQL Server
mysql_connect($dbhost, $dbuser, $dbpass); //Select Database mysql_select_db($dbname) or die(mysql_error());
// Retrieve data from Query String
$age = $_GET['age'];
$sex = $_GET['sex'];
$wpm = $_GET['wpm'];
// Escape User Input to help prevent SQL Injection
$age = mysql_real_escape_string($age);
$sex = mysql_real_escape_string($sex);
$wpm = mysql_real_escape_string($wpm);
//build query
$query = "SELECT * FROM ajax_example WHERE sex = '$sex'";
if(is_numeric($age)) $query .= " AND age <= $age"; if(is_numeric($wpm))
$query .= " AND wpm <= $wpm";
//Execute query
$qry_result = mysql_query($query) or die(mysql_error());
//Build Result String
$display_string = "<table>"; $display_string .= "<tr>";
$display_string .= "<th>Name</th>"; $display_string .= "<th>Age</th>";
$display_string .= "<th>Sex</th>"; $display_string .= "<th>WPM</th>";
$display_string .= "</tr>"; // Insert a new row in the table for each person returned while($row = mysql_fetch_array($qry_result)) { $display_string .= "<tr>";
$display_string .= "<td>$row[name]</td>";
$display_string .= "<td>$row[age]</td>";
$display_string .= "<td>$row[sex]</td>";
$display_string .= "<td>$row[wpm]</td>";
$display_string .= "</tr>"; } echo "Query: " . $query . "<br />";
$display_string .= "</table>"; echo $display_string;
?>
Şimdi Max Age veya başka bir kutuya geçerli bir değer (ör. 120) girmeyi deneyin ve ardından Query MySQL düğmesini tıklayın.
Girişinizi yaptıktan sonra sonucunuz bu bölümde burada görüntülenecektir.
Bu dersi başarıyla tamamladıysanız, AJAX uygulamaları yazmak için MySQL, PHP, HTML ve Javascript'i birlikte nasıl kullanacağınızı biliyorsunuzdur.
AJAX Güvenliği: Sunucu Tarafı
AJAX tabanlı Web uygulamaları, normal Web uygulamalarıyla aynı sunucu tarafı güvenlik şemalarını kullanır.
Kimlik doğrulama, yetkilendirme ve veri koruma gereksinimlerini web.xml dosyanızda (bildirime dayalı) veya programınızda (programlı) belirlersiniz.
AJAX tabanlı Web uygulamaları, normal Web uygulamalarıyla aynı güvenlik tehditlerine tabidir.
AJAX Güvenliği: İstemci Tarafı
JavaScript kodu bir kullanıcı / bilgisayar korsanı tarafından görülebilir. Hacker, sunucu tarafı zayıflıklarını anlamak için JavaScript kodunu kullanabilir.
JavaScript kodu sunucudan indirilir ve istemcide yürütülür ("eval") ve kötü amaçlı kodla istemciyi tehlikeye atabilir.
İndirilen JavaScript kodu, sand-box güvenlik modeli ile sınırlandırılmıştır ve imzalı JavaScript için rahatlatılabilir.
AJAX çok hızlı büyüyor ve onunla ilgili birçok sorunu barındırmasının nedeni budur. Zaman geçtikçe bunların çözüleceğini ve AJAX'ın web uygulamaları için ideal hale geleceğini umuyoruz. AJAX'ın şu anda yaşadığı birkaç sorunu listeliyoruz.
Complexity is increased
Sunucu tarafı geliştiricilerin, sunum mantığının HTML istemci sayfalarında ve sunucu tarafı mantığında gerekli olacağını anlamaları gerekecektir.
Sayfa geliştiricilerinin JavaScript teknolojisi becerilerine sahip olması gerekir.
AJAX-based applications can be difficult to debug, test, and maintain
- JavaScript'i test etmek zordur - otomatik test etmek zordur.
- JavaScript'te zayıf modülerlik.
- Henüz tasarım modellerinin veya en iyi uygulama yönergelerinin eksikliği.
Toolkits/Frameworks are not mature yet
- Çoğu beta aşamasındadır.
No standardization of the XMLHttpRequest yet
- IE'nin gelecekteki sürümü bunu ele alacaktır.
No support of XMLHttpRequest in old browsers
- Iframe yardımcı olacaktır.
JavaScript technology dependency and incompatibility
- Uygulamaların çalışması için etkinleştirilmelidir.
- Yine de bazı tarayıcı uyumsuzlukları mevcuttur.
JavaScript code is visible to a hacker
- Kötü tasarlanmış JavaScript kodu, güvenlik sorunlarını davet edebilir.