طرق الفحص والتعديل في FormData

FormData هو أفضل صديق لمستخدِم طلبات البيانات عبر XML، وسيتم ترقيته في الإصدار 50 من Chrome. نحن بصدد إضافة طرق تتيح لك فحص عناصر FormData أو تعديلها بعد إجراء التغييرات. يمكنك الآن استخدام get() وdelete() وأدوات المساعدة في التكرار مثل entries وkeys والمزيد. (اطّلِع على القائمة الكاملة).

إذا لم تكن تستخدِم FormData، يمكنك استخدام هذه الواجهة البسيطة المتوافقة جيدًا التي تتيح لك إنشاء نموذج افتراضي آليًا وإرساله إلى مكان بعيد باستخدام window.fetch() أو XMLHttpRequest.send(formData).

لمعرفة بعض الأمثلة، يُرجى الاطّلاع على ما يلي.

تحليل النماذج الفعلية باحترافية

يمكن إنشاء FormData من نموذج HTML حقيقي، مع أخذ لقطة لجميع قيمه الحالية. ومع ذلك، كان الجسم غير شفاف تمامًا. كل ما كان بإمكانك فعله هو إرسالها بدون تغيير إلى خادم. يمكنك الآن استخدامها وتعديلها وتغييرها وتصغيرها وتحميلها:

function sendRequest(theFormElement) {
    var formData = new FormData(theFormElement);
    formData.delete("secret_user_data"); // don't include this one!
    if (formData.has("include_favorite_color")) {
    formData.set("color", userPrefs.getColor());
    }
    // log all values like <input name="widget">
    console.info("User selected widgets", formData.getAll("widget"));

    window.fetch(url, {method: 'POST', body: formData});
}

يمكنك أيضًا إرسال FormData من خلال XMLHttpRequest الأقدم:

var x = new XMLHttpRequest();
x.open('POST', url);
x.send(formData);

لا تتخلّص من FormData

إذا كنت بصدد إنشاء FormData من الصفر، قد يكون من المزعج عدم التمكّن من إعادة استخدامه، خاصةً إذا كنت قد قضّيت الكثير من الوقت في إنشاء هذه الحقول. بما أنّ الطريقتَين window.fetch() وXMLHttpRequest.send() تلتقطان لقطة FormData، يمكنك الآن إعادة استخدام عملك وتعديله بأمان. راجِع هذا المثال:

// append allows multiple values for the same key
var formData = new FormData();
formData.append("article", "id-123");
formData.append("article", "id-42");

// send like request
formData.set("action", "like");
window.fetch(url, {method: 'POST', body: formData});

// send reshare request
formData.set("action", "reshare");  // overrides previous "action"
window.fetch(url, {method: 'POST', body: formData});