إرسال النماذج عبر AJAX وتقديم الملاحظات
أتقن إرسال بيانات النماذج بشكل غير متزامن عبر AJAX، وقدّم ملاحظات فورية للمستخدم، وعالج استجابات الخادم دون إعادة تحميل الصفحة بالكامل لتجربة استخدام أكثر سلاسة.
إرسال النماذج عبر AJAX وتقديم الملاحظات درس مجاني في jQuery Academy على CoddyKit. هذا هو الدرس 3 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في jQuery Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة jQuery Academy 3 دروس في المجموع.
نماذج سلسة باستخدام AJAX
تخيلوا إرسال نموذج دون إعادة تحميل الصفحة بالكامل! تلك هي روعة إرسال النماذج باستخدام AJAX.
فبدلًا من تحديث الصفحة بالكامل، يتيح لكم AJAX إرسال بيانات النموذج إلى الخادم في الخلفية. ويوفر ذلك تجربة مستخدم أكثر سلاسة وسرعة، وهي مثالية للتعليقات أو التسجيل أو التحديثات السريعة.
إيقاف الإرسال الافتراضي
تتمثل الخطوة الأولى في إرسال نموذج عبر AJAX في منع السلوك الافتراضي للمتصفح. فإذا لم تفعلوا ذلك، فستُعاد تحميل الصفحة كالمعتاد، مما يلغي الغرض من استخدام AJAX!
نحقق ذلك باستدعاء event.preventDefault() داخل معالج submit الخاص بالنموذج.
<form id="myForm">
<label for="username">Name:</label>
<input type="text" id="username" name="username" placeholder="Your name">
<button type="submit">Submit</button>
</form>
<div id="status"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
$('#myForm').submit(function(event) {
event.preventDefault(); // Stop default form submission
$('#status').text("Form submission prevented!");
console.log("Form submission prevented!");
});
});
</script>إعداد بيانات النموذج
قبل إرسال بيانات النموذج عبر AJAX، نحتاج إلى تجهيزها بالشكل الصحيح. وتُعد طريقة .serialize() في jQuery مثالية لذلك!
- تجمع تلقائيًا القيم من جميع عناصر input وselect وtextarea الموجودة داخل النموذج.
- ترمّزها في سلسلة نصية بترميز URL (مثل
name=Alice&email=alice%40example.com). - هذه السلسلة هي التنسيق القياسي لإرسال بيانات النموذج إلى الخادم.
<form id="dataForm">
<label for="name">Name:</label>
<input type="text" id="name" name="name" value="Bob">
<label for="email">Email:</label>
<input type="email" id="email" name="email" value="bob@example.com">
<button type="submit">Get Data</button>
</form>
<div id="output"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
$('#dataForm').submit(function(event) {
event.preventDefault();
let formData = $(this).serialize();
$('#output').text("Serialized: " + formData);
console.log(formData); // name=Bob&email=bob%40example.com
});
});
</script>إرسال طلب AJAX
بعد تسلسل بيانات النموذج، يمكننا الآن إرسالها إلى الخادم. يوفر jQuery عدة طرق لـ AJAX، لكن $.post() اختصار مناسب لإرسال البيانات باستخدام طريقة HTTP POST.
وتتلقى هذه الطريقة عنوان URL الخاص بالخادم والبيانات المتسلسلة ودالة رد نداء اختيارية لتشغيلها عند النجاح.
<form id="submitForm">
<label for="msg">Message:</label>
<input type="text" id="msg" name="message" value="Hello AJAX!">
<button type="submit">Send</button>
</form>
<div id="response"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
$('#submitForm').submit(function(event) {
event.preventDefault();
let formData = $(this).serialize();
// Using a dummy API endpoint for demonstration
$.post("https://jsonplaceholder.typicode.com/posts", formData, function(data) {
$('#response').text("Success! Server ID: " + data.id);
console.log("Server response:", data);
});
});
});
</script>عرض ملاحظات التحميل
عندما ينقر المستخدم على زر الإرسال، فإنه يتوقع استجابة فورية. وبما أن طلبات AJAX غير متزامنة، فهناك فترة تأخير. لذلك يُعد تقديم ملاحظات مرئية أمرًا بالغ الأهمية!
يمكنكم عرض رسالة 'Loading...' أو مؤشر تحميل أثناء تنفيذ الطلب، ثم إخفاؤها عند وصول الاستجابة.
<style>
#loading { display: none; color: gray; }
</style>
<form id="feedbackForm">
<label for="item">Item:</label>
<input type="text" id="item" name="item" value="New Widget">
<button type="submit">Add</button>
</form>
<div id="loading">Loading...</div>
<div id="status"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
$('#feedbackForm').submit(function(event) {
event.preventDefault();
$('#loading').show(); // Show loading indicator
$('#status').text(''); // Clear previous status
let formData = $(this).serialize();
$.post("https://jsonplaceholder.typicode.com/posts", formData, function(data) {
$('#loading').hide(); // Hide loading
$('#status').text("Item added with ID: " + data.id);
});
});
});
</script>معالجة استجابات النجاح
بعد أن يعالج الخادم بيانات النموذج بنجاح، فإنه يعيد عادةً استجابة. وقد تكون هذه الاستجابة رسالة تأكيد أو معرّف سجل أُنشئ حديثًا أو بيانات محدثة.
تتلقى دالة رد النداء عند النجاح (المعامل الثالث في $.post()) هذه البيانات، مما يتيح لكم تحديث واجهة المستخدم وفقًا لذلك.
<form id="addTodoForm">
<label for="todoTitle">Todo:</label>
<input type="text" id="todoTitle" name="title" placeholder="New todo item">
<button type="submit">Add Todo</button>
</form>
<ul id="todoList"></ul>
<div id="message"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
$('#addTodoForm').submit(function(event) {
event.preventDefault();
$('#message').text('Adding...');
let formData = $(this).serialize();
$.post("https://jsonplaceholder.typicode.com/todos", formData, function(todo) {
$('#message').text('Todo added!');
$('#todoList').append('<li>' + todo.title + ' (ID: ' + todo.id + ')</li>');
$('#addTodoForm')[0].reset(); // Clear form fields
});
});
});
</script>معالجة الأخطاء بسلاسة
لا تنجح جميع الطلبات. فقد تتسبب مشكلات الشبكة أو أخطاء الخادم أو البيانات غير الصالحة في فشل طلب AJAX. ومن الضروري معالجة هذه الأخطاء بسلاسة وإبلاغ المستخدم بها.
في حالة $.post()، يمكنكم تسلسل طريقة .fail(). أما في حالة $.ajax()، فيمكنكم استخدام رد النداء error أو طريقة .fail() على كائن Deferred المُعاد.
<form id="errorForm">
<label for="badData">Data:</label>
<input type="text" id="badData" name="data" value="bad value">
<button type="submit">Submit</button>
</form>
<div id="errorMessage" style="color: red;"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
$('#errorForm').submit(function(event) {
event.preventDefault();
$('#errorMessage').text('');
let formData = $(this).serialize();
// Simulating an error by posting to a non-existent endpoint
$.ajax({
url: "https://jsonplaceholder.typicode.com/nonexistent-endpoint", // Will cause a 404 error
type: "POST",
data: formData
})
.done(function(data) {
$('#errorMessage').text("Unexpected success!");
})
.fail(function(jqXHR, textStatus, errorThrown) {
$('#errorMessage').text("Error: " + textStatus + " - " + errorThrown);
console.error("AJAX Error:", textStatus, errorThrown);
});
});
});
</script>مسح النماذج بعد الإرسال
بعد إرسال النموذج بنجاح، من الجيد بالنسبة إلى تجربة المستخدم مسح حقول الإدخال. فهذا يمنع إعادة الإرسال غير المقصودة ويوفر حالة نظيفة للإجراء التالي.
يمكنكم استخدام طريقة DOM الأصلية .reset() على عنصر النموذج، أو مسح قيم الإدخال الفردية يدويًا.
<form id="clearForm">
<label for="item">Item:</label>
<input type="text" id="item" name="item" value="Item A">
<label for="quantity">Quantity:</label>
<input type="number" id="quantity" name="quantity" value="1">
<button type="submit">Add</button>
</form>
<div id="feedbackMsg" style="color: green;"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
$('#clearForm').submit(function(event) {
event.preventDefault();
$('#feedbackMsg').text('Submitting...');
let formData = $(this).serialize();
$.post("https://jsonplaceholder.typicode.com/posts", formData, function(data) {
$('#feedbackMsg').text('Successfully added! ID: ' + data.id);
$('#clearForm')[0].reset(); // Clears all form fields
});
});
});
</script>مثال كامل لنموذج AJAX
لنجمع جميع الأساليب التي تعلمناها: منع الإرسال الافتراضي، وتسلسل البيانات، وإرسال طلب AJAX، وعرض ملاحظات التحميل، ومعالجة استجابات النجاح والفشل، وأخيرًا مسح النموذج.
يضمن هذا النهج الشامل تجربة متينة وسهلة الاستخدام لنماذج AJAX.
<style>
#loader { display: none; color: blue; }
#result { margin-top: 10px; font-weight: bold; }
</style>
<form id="fullAjaxForm">
<label for="name">Name:</label>
<input type="text" id="name" name="name" required>
<label for="email">Email:</label>
<input type="email" id="email" name="email" required>
<button type="submit">Register</button>
</form>
<div id="loader">Processing...</div>
<div id="result"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
$('#fullAjaxForm').submit(function(event) {
event.preventDefault(); // Stop default form submission
$('#loader').show(); // Show loading indicator
$('#result').text(''); // Clear previous results
let formData = $(this).serialize(); // Serialize form data
$.ajax({
url: "https://jsonplaceholder.typicode.com/users", // Dummy API endpoint
type: "POST",
data: formData,
dataType: "json" // Expect JSON response
})
.done(function(response) {
$('#result').css('color', 'green').text('Registration successful! ID: ' + response.id);
$('#fullAjaxForm')[0].reset(); // Clear form fields
})
.fail(function(jqXHR, textStatus, errorThrown) {
$('#result').css('color', 'red').text('Registration failed: ' + textStatus);
console.error("AJAX Error:", textStatus, errorThrown);
})
.always(function() {
$('#loader').hide(); // Always hide loading indicator
});
});
});
</script>اختبروا مدى فهمكم
لقد تعلمتم كيفية إرسال النماذج باستخدام AJAX مع توفير ملاحظات فورية. فلنختبر معارفكم!
مراجعة: إرسال النماذج بسلاسة
تهانينا! لقد أتقنتم إرسال النماذج باستخدام AJAX، مما يتيح لكم تحسين تطبيقات الويب بتجارب مستخدم سلسة وغير معطِّلة.
- تعلمتم منع السلوك الافتراضي للنموذج باستخدام
event.preventDefault(). - استخدمتم
.serialize()لتجهيز بيانات النموذج بسهولة للإرسال. - نفذتم
$.post()أو$.ajax()لإرسال البيانات بشكل غير متزامن. - أضفتم ملاحظات فورية مهمة للمستخدم في حالات التحميل والنجاح والخطأ.
- وأخيرًا، تعلمتم مسح النماذج بعد الإرسال للحصول على واجهة مستخدم نظيفة.
تُعد هذه المهارات أساسية لبناء نماذج ويب حديثة وسريعة الاستجابة!
الأسئلة الشائعة
هل درس «إرسال النماذج عبر AJAX وتقديم الملاحظات» مجاني؟
نعم — نص درس «إرسال النماذج عبر AJAX وتقديم الملاحظات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة jQuery Academy، انتقل إلى CoddyKit PRO. تتضمن دورة jQuery Academy 3 دروس في المجموع.
ماذا ستتعلم في «إرسال النماذج عبر AJAX وتقديم الملاحظات»؟
أتقن إرسال بيانات النماذج بشكل غير متزامن عبر AJAX، وقدّم ملاحظات فورية للمستخدم، وعالج استجابات الخادم دون إعادة تحميل الصفحة بالكامل لتجربة استخدام أكثر سلاسة. تتمرن على jQuery Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ jQuery Academy؟
لا تُشترط خبرة سابقة. jQuery Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 3.
كم من الوقت يستغرق درس «إرسال النماذج عبر AJAX وتقديم الملاحظات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس jQuery Academy هذا؟
نعم. كل درس في jQuery Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- معالجة حقول النماذج ديناميكيًا
- منطق التحقق من صحة النماذج من جهة العميل
- إرسال النماذج عبر AJAX وتقديم الملاحظات