دعم النقر فوق رابط ، ولكن إرسال منشور (مقابل الحصول) إلى الخادم ، بدون Ajax؟

StackOverflow https://stackoverflow.com/questions/2791969

سؤال

أعتقد أن هذا غير ممكن تمامًا ، لكن ربما أكون مخطئًا. أنا ببساطة ممزقة بين أولئك الذين يعتقدون أن الطلبات النشر فقط يجب أن تعدل البيانات على الخادم والأشخاص الذين يسترخيون القاعدة ويسمحون للحصول على طلبات لتعديل البيانات.

خذ هذا الموقف. لنفترض أن لديك جدولًا ، كل صف عبارة عن صف في قاعدة البيانات. أرغب في السماح لهم بحذف الصف عبر أيقونة "X" الفاخرة باعتبارها الأخيرة <td></td> عنصر في الصف. AFAIK ، الطريقة الوحيدة لإرسال منشور إلى الخادم هي عبر نموذج. لكن هل أنا حقًا أتعامل مع شكل كامل في الماضي <td></td> العنصر فقط للقيام بمنشور؟ أو يجب أن أغش وأستخدم <a href=...></a> علامة التي ترسل طلب الحصول على؟

قد تفكر "افعل كلاهما! أرسل منشورًا واستخدم <a ...></a> بطاقة شعار! استخدم JavaScript + XHR!

ربما وصلنا إلى نقطة عندما لا يكون من المنطقي القلق بشأن تحلل برشاقة؟ لست واثق. أخبرني أنت؟ أنا جديد على تطوير الويب ، لكنني أفهم معظم المفاهيم المعنية.

هل كانت مفيدة؟

المحلول

ليس عليك أن تحشر نموذجًا في كل TD نهائي - يمكنك المحيط بالجدول بأكمله بنموذج واحد يحتوي على زر إرسال في كل TD نهائي. يحتاج كل منها إلى قيمة/معرّف مختلفة ، على سبيل المثال

    <td><input type="submit" name="delete_172" value="Delete"></td>
    ...
    <td><input type="submit" name="delete_198" value="Delete"></td>

ثم سيحصل الخادم على واحد delete_172=Delete في التشكيل POST المعلمات. مسح من خلال جميع المعلمات لتتناسب delete_[0-9]+, ، انقسام على السطح ، ولديك معرف السجل الذي يتم حذفه ، أو لديك مفتاح خريطة للعثور على معرف السجل لحذفه (إذا كنت تريد الاحتفاظ بمعرفات السجل خارج الصفحة للأمان)

بعد ذلك يعمل ، قم بإرفاق معالج أحداث JS بحدث OnSubmit النموذج لتقديم كل شيء من خلال XHR وحذف صف الجدول ديناميكيًا.

نصائح أخرى

واحدة من المشكلات المتعلقة بطلب GET طلب تعديل هي أنه من خلال زيارة بيانات الارتباط يتم تغييرها. قد لا يتم التنقل في الرابط بواسطة شخص ، على سبيل المثال ، تزحف Google على موقعك. ضرب التحديث أيضا يغير البيانات.

لا أنصح بتجاهل الاتفاقية حول الحصول على Post. الزر الخلفي والصفحة تحديث وأشياء من هذا القبيل سوف تعطيك الجحيم. (وفي كل مرة تقوم فيها بإرسال طلب نشر ، قم بإعادة التوجيه إلى منظر جديد ، لنفس الأسباب.)

أنت فقط تعرف المستخدمين ، لكنني أعتقد أنه من المقبول جدًا في الوقت الحاضر أن تتطلب JavaScript في "تطبيق ويب" والسماح لرجال No-JS بالالتزام بـ "صفحات الويب". على أي حال ، لما يستحق الأمر ، أحب أحيانًا أن أقوم بحل JavaScript أقل خيالية (من Ajax) مثل هذا ...

ضع نموذجًا في أي مكان تريده في الصفحة:

<form method="post" target="yourpage.ext" id="deleteRecordForm">
 <input type="hidden" name="IdToDelete" value="" id="deleteRecordInput" />
</form>

للرابط الخاص بك:

<a href="#" onclick="deleteRecord(thisId);return false;">[x]</a>

أخيرًا ، جافا سكريبت:

<script type="text/javascript">
 function deleteRecord (id){
   if (confirm ('Are you sure you want to delete this record?')){
     document.getElementById('deleteRecordInput').value = id;
     document.getElementById('deleteRecordForm').submit ();
   }
 }
</script>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top