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

FormData هو الصديق المفضّل لمستخدم XHR، ويتم ترقيته في Chrome 50. نحن بصدد إضافة طُرق تتيح لك فحص عناصر 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});