XML DOM - شیء XMLHttpRequest

XMLHttpRequest آئی سی

شیء XMLHttpRequest دسترسی کامل به پروتکل HTTP را فراهم می‌کند، از جمله توانایی ایجاد درخواست‌های POST و HEAD و درخواست‌های معمول GET. XMLHttpRequest می‌تواند پاسخ سرور وب را به صورت همزمان یا غیرهمزمان بازگرداند و می‌تواند محتوا را به صورت متن یا یک مستند DOM بازگرداند.

با اینکه نام XMLHttpRequest دارد، محدود به استفاده با مستندات XML نمی‌شود: می‌تواند هر نوع مستند متنی را دریافت کند.

شیء XMLHttpRequest نام دارد AJAX یک ویژگی کلیدی از معماری برنامه‌های وب است.

پشتیبانی مرورگر

XMLHttpRequest کا تمامی مرورگرهای مدرن به خوبی پشتیبانی می‌کنند. تنها وابستگی مرورگر به ایجاد شیء XMLHttpRequest است. در IE 5 و IE 6، باید از توابع ساختگر ActiveXObject() اختصاصی IE استفاده شود. همانطور که در XMLHttpRequest آئی سی 这一节所介绍的。

W3C 标准化

XMLHttpRequest 对象还没有标准化,但是 W3C 已经开始了标准化的工作,本手册介绍的内容都是基于标准化的工作草案。

当前的 XMLHttpRequest 实现已经相当一致。但是和标准有细微的不同。例如,一个实现可能返回 null,而标准要求是空字符串,或者实现可能把 readyState 设置为 3 而不保证所有的响应头部都可用。

属性

readyState

HTTP 请求的状态.当一个 XMLHttpRequest 初次创建时,这个属性的值从 0 开始,直到接收到完整的 HTTP 响应,这个值增加到 4。

5 个状态中每一个都有一个相关联的非正式的名称,下表列出了状态、名称和含义:

状态 名称 描述
0 Uninitialized 初始化状态。XMLHttpRequest 对象已创建或已被 abort() 方法重置。
1 Open open() 方法已调用,但是 send() 方法未调用。请求还没有被发送。
2 Sent Send() 方法已调用,HTTP 请求已发送到 Web 服务器。未接收到响应。
3 Receiving 所有响应头部都已经接收到。响应体开始接收但未完成。
4 Loaded HTTP 响应已经完全接收。

readyState 的值不会递减,除非当一个请求在处理过程中的时候调用了 abort() 或 open() 方法。每次这个属性的值增加的时候,都会触发 onreadystatechange 事件句柄。

responseText

目前为止为服务器接收到的响应体(不包括头部),或者如果还没有接收到数据的话,就是空字符串。

如果 readyState 小于 3,这个属性就是一个空字符串。当 readyState 为 3,这个属性返回目前已经接收的响应部分。如果 readyState 为 4,这个属性保存了完整的响应体。

如果响应包含了为响应体指定字符编码的头部,就使用该编码。否则,假定使用 Unicode UTF-8。

responseXML

مطلبی کے لئے جواب،XML کی شکل میں نکالنا اور کے طور پر استعمال کیا جاتا ہے مستند返回。

status

由服务器返回的 HTTP 状态代码,如 200 表示成功,而 404 表示 "Not Found" 错误。当 readyState 小于 3 的时候读取这一属性会导致一个异常。

statusText

这个属性用名称而不是数字指定了请求的 HTTP 的状态代码。也就是说,当状态为 200 的时候它是 "OK",当状态为 404 的时候它是 "Not Found"。和 status 属性一样,当 readyState 小于 3 的时候读取这一属性会导致一个异常。

事件句柄

onreadystatechange

每次 readyState 属性改变的时候调用的事件句柄函数。当 readyState 为 3 时,它也可能调用多次。

方法

abort()

取消当前响应,关闭连接并且结束任何未决的网络活动。

这个方法把 XMLHttpRequest 对象重置为 readyState 为 0 的状态,并且取消所有未决的网络活动。例如,如果请求用了太长时间,而且响应不再必要的时候,可以调用这个方法。

getAllResponseHeaders()

把 HTTP 响应头部作为未解析的字符串返回。

如果 readyState 小于 3,这个方法返回 null。否则,它返回服务器发送的所有 HTTP 响应的头部。头部作为单个的字符串返回,一行一个头部。每行用换行符 "\r\n" 隔开。

getResponseHeader()

返回指定的 HTTP 响应头部的值。其参数是要返回的 HTTP 响应头部的名称。可以使用任何大小写来制定这个头部名字,和响应头部的比较是不区分大小写的。

اس میذر کا بازگشت کار کا مطلب ہے کہ مخصوص HTTP پرسنل کا کپ ڈیوائز کا مطلب، اگر اس کپ کا کپ نہیں موصول ہوا یا readyState کم از کم 3 سے کم ہے تو خالی سٹرنگ ہوگا

open()

HTTP پرسنل کا پارامتر فراہم کرنا، جس میں URL اور HTTP میذر کا چارج کیا گیا تھا، لیکن پرسنل کو فراہم نہیں کیا گیا تھا

send()

HTTP پرسنل کا سیکشن فراہم کرنا، جس میں open() می�دھم کا پارامتر اور اس میں دوسرے پارامتر کا چارج کیا گیا تھا، اور اختیاری پرسنل بند کا چارج کیا گیا تھا

setRequestHeader()

ایک کھلے پرسنل پارنٹ کا سیکشن یا کسی دوسرے پارنٹ کو ڈاٹا فراہم کرنا اور اس کو فراہم کرنا یا جوڑنا

XMLHttpRequest.open()

پارامترهای درخواست HTTP را تنظیم می‌کند

قانون‌گذاری

open(method, url, async, username, password)

پارامتر method روش HTTP مورد استفاده برای درخواست است. مقادیر شامل GET، POST و HEAD است.

پارامتر url محتوای درخواست است. بیشتر مرورگرها یک استراتژی امنیت هم‌محل را پیاده‌سازی کرده‌اند و می‌خواهند که این URL با متنی که اسکریپت در آن قرار دارد دارای نام میزبان و پورت مشابهی باشد.

پارامتر async نشان‌دهنده این است که درخواست باید به صورت غیرمستقیم اجرا شود. اگر این پارامتر false باشد، درخواست مستقیم است و فراخوانی‌های بعدی به روش send() تا دریافت کامل پاسخ مسدود می‌شوند. اگر این پارامتر true باشد یا مشخص نشده باشد، درخواست غیرمستقیم است و معمولاً نیاز به یک دستگیره رویداد onreadystatechange دارد.

پارامترهای username و password اختیاری هستند و برای ارائه اعتبار برای دسترسی به url مورد نیاز هستند. اگر مشخص شدند، آن‌ها هرگونه اعتباری که url خود مشخص کرده است را پوشش می‌دهند.

توضیح

این روش پارامترهای درخواست را برای استفاده در روش send() به صورت بعدی تنظیم می‌کند. آن را به حالت readyState 1 تنظیم می‌کند، تمامی سرخط‌های درخواست قبلی و سرخط‌های پاسخ قبلی را حذف می‌کند و پارامترهای responseText، responseXML، status و statusText را به مقادیر پیش‌فرض خود تنظیم می‌کند. این روش زمانی که readyState 0 باشد (وقتی XMLHttpRequest به تازگی ایجاد شده یا روش abort() فراخوانی شده است) و زمانی که readyState 4 باشد (وقتی پاسخ دریافت شده است)، فراخوانی این روش امن است. هنگامی که برای هر حالت دیگری فراخوانی شود، رفتار روش open() به صورت مشخص است.

به جز ذخیره کردن پارامترهای درخواست برای استفاده در روش send() و بازنشانی XMLHttpRequest برای استفاده مجدد، روش open() هیچ عمل دیگری ندارد. توجه داشته باشید که هنگام فراخوانی این روش، پیاده‌سازی معمولاً یک اتصال شبکه به سرور وب باز نمی‌کند.

XMLHttpRequest.send()

یک درخواست HTTP ارسال کنید

قانون‌گذاری

send(body)

اگر روشی که از طریق فراخوانی open() تعیین شده است POST یا PUT باشد، بدنه پارامتر به عنوان یک رشته یا مستنداگر درخواست بدنه ضروری نیست، این پارامتر null است. برای هر روش دیگری، این پارامتر غیرقابل استفاده است و باید null باشد (برخی از پیاده‌سازی‌ها اجازه نمی‌دهند که این پارامتر حذف شود).

توضیح

این روش باعث ارسال یک درخواست HTTP می‌شود. اگر روش open() قبلاً فراخوانی نشده باشد، یا به عبارت دیگر، اگر حالت readyState برابر با 1 نباشد، روش send() یک استثنا پرتاب می‌کند. در غیر این صورت، آن یک درخواست HTTP ارسال می‌کند که از چندین بخش تشکیل شده است:}

  • روش HTTP، URL و مجوزهای اعتبارسنجی که در فراخوانی قبلی open() مشخص شده است (اگر وجود دارد).
  • سرتیتر درخواست که در فراخوانی قبلی setRequestHeader() مشخص شده است (اگر وجود دارد).
  • که به این روش منتقل می‌شود بدنه پارامترها.

بعد از اینکه درخواست منتشر شد، روش send() حالت readyState را به 2 تنظیم کرده و رویداد onreadystatechange را فعال می‌کند.

اگر پارامتر async فراخوانی قبلی open() برابر با false باشد، این روش مسدود شده و برمی‌گردد تا حالت readyState برابر با 4 باشد و پاسخ سرور به طور کامل دریافت شده باشد. در غیر این صورت، اگر پارامتر async برابر با true باشد یا این پارامتر حذف شده باشد، روش send() به طور فوری برمی‌گردد و، همانطور که در ادامه توضیح داده خواهد شد، پاسخ سرور در یک رشته پس‌زمینه پردازش می‌شود.

اگر پاسخ سرور دارای یک HTTP ری‌دایرکت باشد، روش send() یا رشته‌های پس‌زمینه به طور خودکار از ری‌دایرکت پیروی می‌کنند. هنگامی که تمام سرتیترهای پاسخ HTTP دریافت شده‌اند، روش send() یا رشته‌های پس‌زمینه حالت readyState را به 3 تنظیم کرده و رویداد onreadystatechange را فعال می‌کنند. اگر پاسخ طولانی باشد، روش send() یا رشته‌های پس‌زمینه ممکن است در حالت 3 رویداد onreadystatechange را فعال کنند: این می‌تواند به عنوان یک نشانگر پیشرفت بارگذاری استفاده شود. در نهایت، هنگامی که پاسخ کامل شد، روش send() یا رشته‌های پس‌زمینه حالت readyState را به 4 تنظیم کرده و آخرین بار رویداد را فعال می‌کنند.

XMLHttpRequest.setRequestHeader()

قانون‌گذاری

setRequestHeader(name, value)

پارامتر name نام سرتیتر مورد نظر است. این پارامتر نباید شامل فضاهای خالی، دوام یا خطوط خالی باشد.

پارامتر value مقدار سرتیتر است. این پارامتر نباید شامل خطوط خالی باشد.

توضیح

روش setRequestHeader() سرتیتر یک درخواست HTTP را تعیین می‌کند که باید در درخواست‌هایی که از طریق فراخوانی‌های بعدی send() منتشر می‌شوند، شامل شود. این روش فقط زمانی قابل فراخوانی است که حالت readyState برابر با 1 باشد، به عنوان مثال، پس از فراخوانی open()، اما قبل از فراخوانی send().

اگر سرتیتر مشخص شده با نام مشخص شده قبلاً تعیین شده باشد، مقدار جدید سرتیتر این است: مقدار قبلی، به علاوه کاما، فضاهای خالی و مقدار مشخص شده توسط این فراخوانی.

اگر open() کال سے احراز کی معلومات مخصوص کی گئی ہیں تو XMLHttpRequest خودکار طور پر مناسب Authorization درخواست سر دراوسی بھی ارسال کرتا ہے۔ لیکن آپ setRequestHeader() استعمال کرسکتے ہیں تاکہ اس سر دراوسی کو شامل کرسکیں۔ایسا ہی طور پر اگر وائبر سرور کوئی کوکی اس سائٹ کی URL سے متعلق رکھا ہوا ہے جو open() سے بھیج دیا گیا ہے تو مناسب Cookie یا Cookie2 سر دراوسی خودکار طور پر درخواست میں شامل کی جاتی ہیں۔ یہ کوکی سر دراوسی کو setRequestHeader() کی مدد سے شامل کرسکتے ہیں۔XMLHttpRequest بھی User-Agent سر دراوسی کا اصل قیمتی سر دراوسی فراہم کرسکتا ہے، اگر یہ طوری کرتا ہے تو آپ کی سر دراوسی کی کوئی بھی قیمتی سر دراوسی اس اصل قیمتی سر دراوسی کے بعد شامل کی جاتی ہوگی۔

کچھ درخواست کے سر دراووسیں XMLHttpRequest کی طرف سے خودکار طور پر سیٹ کی جاتی ہیں، نہ کہ اس طریقے سے سیٹ کی جاتی ہیں، تاکہ وہ ایچ تی پی پروٹوکول کے مطابق ہوں، یہ شامل پروکسی سے متعلق سر دراوسیں بھی ہیں:

  • Host
  • Connection
  • Keep-Alive
  • Accept-charset
  • Accept-Encoding
  • If-Modified-Since
  • If-None-Match
  • If-Range
  • Range