**โดโจทูลคิต** (อังกฤษ: Dojo Toolkit เขียนตามสไตล์เป็น **dōjō toolkit**) เป็น โอเพนซอร์ส DHTML ทูลคิท ที่เขียนด้วยจาวาสคริปต์ ช่วยในการพัฒนาเอแจ็กซ์ในเว็บแอปพลิเคชัน ริเริ่มโดย อเล็กซ์ รัสเสล (Alex Russell) ใน พ.ศ. 2547 ภายใต้การดูแลของมูลนิธิโดโจ (Dojo Foundation) มีสัญญาอนุญาต 2 แบบให้เลือกใช้ ได้แก่ สัญญาอนุญาต BSD และ สัญญาอนุญาต Academic Free มูลนิธิโดโจเป็นองค์กรไม่แสวงหาผลประโยชน์มีวัตถุประสงค์เพื่อส่งเสริมการนำทูลคิทนี้ไปใช้งาน

ความสามารถ
----------

### เครื่องมือในหน้าเว็บเพจ (Widgets)

Dojo widgets เป็นเครื่องมือต่างๆในหน้าเว็บเพจ เขียนเป็นโค้ดสำเร็จรูปโดยใช้ JavaScript, HTML และ CSS
สนับสนุนการทำงานบนหลายเบราว์เซอร์ที่แพร่หลายในปัจจุบัน ช่วยให้เว็บเพจตอบโต้กับผู้ใช้ได้น่าสนใจ และพัฒนาง่ายขึ้น
ตัวอย่างของเครื่องมือใน Dojo widgets เช่น

* Menu, Tab และ Tooltips
* ตารางปรับการเรียงลำดับใหม่ได้, แผนภาพแบบไดนามิก และ ตัวช่วยในการสร้างภาพเวกเตอร์
* การทำ Effects ต่างๆ เช่น fades, wipes และ slides, และตัวช่วยในการสร้าง effects แบบต่างๆ
* Tree ที่สนับสนุนการ drag-n-drop
* แบบฟอร์ม และ ฟังก์ชันในการตรวจสอบความถูกต้องของแบบฟอร์ม
* Date selector, Time selector ในรูปของปฏิทิน และ นาฬิกา
* Rich Text Editor

### การสื่อสารแบบไม่ต่อเนื่อง (Asynchronous communication)

หนึ่งในความสามารถหลักของ เอแจ็กซ์ แอปพลิเคชัน คือ การสื่อสารแบบไม่ต่อเนื่อง (Asynchronous communication) ของ เบราว์เซอร์ กับทางฝั่งเซิร์ฟเวอร์
กล่าวคือ สามารถส่งถ่ายและแสดงผลข้อมูลไปพร้อมๆกันโดยไม่ต้องรีโหลดทั้งหน้าใหม่หมด.
ปกติแล้วการทำเช่นนี้จะต้องเรียกใช้ XMLHttpRequest ใน JavaScript
ซึ่งในแต่ละเบราว์เซอร์ จะมีวิธีการเรียกใช้ที่แตกต่างกันอยู่เล็กน้อย.
Dojo นำการจัดการพื้นฐาน เรื่องเกี่ยวกับข้อผิดพลาด, ปัญหาการใช้งานเกี่ยวกับปุ่ม "ย้อนกลับ", ปัญหาในการคั่นหน้า (Bookmark) และความแตกต่างระหว่างเบราว์เซอร์
ของการเรียกใช้ XMLHttpRequest รวมให้เรียกผ่าน dojo.io.bind เหมือนกันทั้งหมดแทน
ซึ่งสามารถปรับให้ใช้วิธีอื่นนอกจาก XMLHttpRequest ได้ด้วย (เช่น การเรียกผ่าน IFrames ที่ซ่อนไว้แทน).

### ระบบจัดการแพ็จเกจ

Dojo มีระบบการจัดการเป็นแพ็จเกจ เพื่อให้สามารถแยกพัฒนาเป็นส่วนๆได้
โดยสคริปต์ส่วนหลักทำหน้าที่จัดสภาพแวดล้อมเพื่อเตรียมโหลดแพ็จเกจที่จะใช้
โดยสร้างเนมสเปซต่างๆ เช่น "io", "event", "lfx", และอื่นๆ ไว้ใต้เนมสเปซ "dojo"
หลังจากนั้นเมื่อต้องการใช้แพ็จเกจใด ค่อยโหลดแพ็จเกจนั้นๆในระหว่างการทำงานขึ้นมา (เช่น ผ่าน XMLHttpRequest)
โดยระบบจัดการแพ็จเกจสามารถโหลดแพ็จเกจอื่นๆนอกจาก เนมสเปซ "dojo" ได้
ทำให้สามารถเพิ่มเอกซ์เทนชัน (Extension) หรือ ไลบรารี (Library) อื่นๆของเราเองได้ด้วย

แพ็จเกจหนึ่งๆอาจประกอบด้วยไฟล์เดียว หรือหลายๆไฟล์รวมกัน.
แต่ละไฟล์หรือแพ็จเกจ สามารถบอกความต้องการว่าต้องใช้ไฟล์หรือแพ็จเกจใดบ้างในการทำงาน
เมื่อทำการโหลด ของที่ต้องการทั้งหมดจะถูกโหลดตามไปโดยอัตโนมัติ

แต่เว็บเบราว์เซอร์มักไม่เก็บข้อมูลจาก XMLHttpRequest ไว้ในแคช ต่างจากไฟล์ JavaScript ธรรมดาที่มักจะถูกเก็บไว้เสมอ
ทำให้การอ้างแพ็จเกจต่างๆ ต้องทำการโหลดจากเซิร์ฟเวอร์ใหม่ทุกครั้ง
เพื่อลดปัญหาดังกล่าวจึงมีการสร้างโค้ดแบบเป็น โพรไฟล์ (Profiles) ขึ้น
โดยสามารถเขียนโพรไฟล์ระบุรายการแพ็จเกจที่จำเป็น
จากนั้นใช้ Apache Ant ช่วย เพื่อรวมแพ็จเกจเหล่านี้เป็นไฟล์ JavaScript ที่บีบอัดแล้วไฟล์เดียว

สำหรับโพรไฟล์การใช้งานทั่วๆไปสามารถหาดาวน์โหลด ได้ในที่เดียวกันกับที่ให้ดาวน์โหลด Dojo ฉบับเต็ม

  

### การเก็บข้อมูลในฝั่งผู้ใช้

นอกจากสนับสนุนการทำงานกับระบบคุกกี้แล้ว
Dojo ยังมีระบบการเก็บข้อมูลในเครื่องผู้ใช้อย่างอื่นที่ เรียกว่า Dojo Storage ด้วย
โดย Dojo Storage สามารถทำงานกับหลายเว็บเบราว์เซอร์ที่ได้รับความนิยมในปัจจุบัน เช่น อินเทอร์เน็ตเอกซ์พลอเรอร์, ไฟร์ฟอกซ์ และ ซาฟารี
ในการทำงาน Dojo จะเลือกวิธีการเก็บข้อมูลที่เหมาะสมที่สุดในแต่ละเบราว์เซอร์เอง เช่น
ใน ไฟร์ฟอกซ์ 2 จะใช้ระบบการเก็บข้อมูลของเบราว์เซอร์เอง (Native browser persistence),
ในเบราว์เซอร์อื่นๆจะใช้ Flash applet. โดย Flash 6+ นั้นถูกติดตั้งมากกว่า 95% ของเครื่องคอมพิวเตอร์ที่ใช้อินเทอร์เน็ตได้
ทำให้ระบบการเก็บข้อมูลนี้สามารถใช้งานได้กับเว็บแอปพลิเคชันที่อยู่ทางฝั่งเซอฟ์เวอร์ส่วนใหญ่
สำหรับเว็บแอปพลิเคชัน ที่อยู่ภายในเครื่องของผู้ใช้เอง (อย่างเช่นในซีดีสื่อการสอน หรือ URL ที่ขึ้นด้นด้วย file://)
สำหรับ ไฟร์ฟอกซ์ Dojo Storage จะใช้ XPCOM แทน และจะใช้ ActiveX แทนสำหรับ อินเทอร์เน็ตเอกซ์พลอเรอร์

นักพัฒนาสามารถใช้งาน Dojo Storage ในลักษณะเดียวกับการใช้ตารางแฮช (hash table) ผ่านการเรียก put() และ get()

ดูเพิ่ม
-------

* Prototype Javascript Framework
* เอแจ็กซ์
* จาวาสคริปต์
* XMLHttpRequest

อ้างอิง
-------

1. 1 2  A Brief History of Dojo
2. ↑
3. ↑
4. 1 2  "Dojo Toolkit License". *Dojo Toolkit*. สืบค้นเมื่อ 17 April 2017.

แหล่งข้อมูลอื่น
---------------

* dojotoolkit.org (อังกฤษ)
* Dojo Project's JotSpot wiki เก็บถาวร 2007-01-28 ที่ เวย์แบ็กแมชชีน (อังกฤษ)
* Dojo Foundation เก็บถาวร 2007-01-05 ที่ เวย์แบ็กแมชชีน (อังกฤษ)
* Ajaxian.com (อังกฤษ)


| * ด
* ค
* ก
โปรแกรมประยุกต์บนเว็บ |
| --- |
| 
* เปรียบเทียบ

 |
| ซีพลัสพลัส | 
* CppCMS
* Wt

 |
| CLI | 
* เอเอสพีดอตเน็ต
	+ Core
	+ เอแจ็กซ์
	+ Dynamic Data
	+ MVC
	+ Razor
	+ Web Forms
* DNN
* BFC
* MonoRail
* OpenRasta
* Umbraco

 |
| ColdFusion | 
* CFWheels
* ColdBox Platform
* ColdSpring
* Fusebox
* Mach-II
* Model-Glue

 |
| Common Lisp | 
* Caveman2
* CL-HTTP
* UnCommon Web
* Weblocks

 |
| D | 
* Vibe.d

 |
| Haskell | 
* Happstack
* Yesod
* Snap

 |
| Java | 
* AppFuse
* Flexive
* Grails
* GWT
* ICEfaces
* ItsNat
* JavaServer Faces
* JHipster
* Jspx
* JWt
* OpenXava
* Play
* Reasonable Server Faces
* Remote Application Platform
* RIFE
* Seam
* Spring
* Stripes
* Struts
* Tapestry
* Vaadin
* Vert.x
* WebWork
* Wicket
* WaveMaker
* ZK

 |
| จาวาสคริปต์ | 
* Ample SDK
* Angular/AngularJS
* Backbone.js
* Chaplin.js
* Closure
* Dojo Toolkit
* Ember.js
* Ext JS
* เจเควียรี
* Meteor
* MooTools
* Node.js
* Prototype
* React
* Rico
* script.aculo.us
* Sencha Touch
* SproutCore
* Wakanda

 |
| เพิร์ล | 
* Catalyst
* Dancer
* Mason
* Maypole
* Mojolicious
* WebGUI

 |
| พีเอชพี | 
* เค้กพีเอชพี
* โค้ดอิกไนเทอร์
* Fat-Free
* FuelPHP
* Gyroscope
* Horde
* Kohana
* Laravel
* Lithium
* Midgard
* MODX
* Nette
* Phalcon
* PRADO
* Qcodo
* Silex
* SilverStripe
* Symfony
* TYPO3
* Xaraya
* XOOPS
* Yii
* Zend Framework

 |
| ไพทอน | 
* BlueBream
* CherryPy
* Django
* Flask
* Grok
* Nevow
* Pyjs
* Pylons
* Pyramid
* Quixote
* TACTIC
* Tornado
* เทอร์โบเกียร์
* web2py
* Webware
* Zope 2

 |
| Ruby | 
* Camping
* Merb
* Padrino
* รูบีออนเรลส์
* Sinatra

 |
| Scala | 
* Lift
* Play
* Scalatra

 |
| สมอลล์ทอล์ก | 
* AIDA/Web
* Seaside

 |
| ภาษาอื่น ๆ | 
* Application Express (พีแอล/เอสคิวแอล)
* Grails (Groovy)
* Kepler (Lua)
* OpenACS (Tcl)
* SproutCore (JavaScript-Ruby)
* Yaws (Erlang)

 |