# إعادة فتح Widget باستدعاء AJAX

**URL:** <https://meta.discourse.org/t/reopenwidget-with-ajax-call/246450>\
**Category:** Development\
**Created:** [22 نوفمبر 2022، 5:52م UTC](https://meta.discourse.org/t/reopenwidget-with-ajax-call/246450 "2022-11-22T17:52:50Z")\
**Posts on this page:** 1\
**Showing post:** 4

<div class="post-metadata">

**Author:** ![StonkGodCapital](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stonkgodcapital/32/242643_2.png) [@StonkGodCapital](https://meta.discourse.org/u/StonkGodCapital)\
**Post date:** [23 نوفمبر 2022، 4:43م UTC](https://meta.discourse.org/t/reopenwidget-with-ajax-call/246450/4 "2022-11-23T16:43:01Z")

</div>

بالعودة لتقديم الشكر لـ @merefield، تعمقت أكثر في التسلسل وتمكنت من إنجاز المهمة عن طريق إجراء استدعاء API في المُسلسل بدلاً من طلبه من JS كما كنت أفعل.

أنا متأكد من وجود عدد لا يحصى من الأسباب لعدم اقتراح هذا، ولكنه يعمل بالنسبة لي لذا سأستمر في استخدامه، ولمن يجد هذا في المستقبل، يمكنك إدخال البيانات في مُسلسل باستخدام الكود التالي:

```plaintext
add_to_serializer(:topic_view, :data_name) do
    JSON.parse(Net::HTTP.get(URI('https://yourwebsite.com?topic_id=' + object.topic.id.to_s)))
end

```

مما يسمح لك بعد ذلك بالوصول إلى البيانات ضمن استدعاء لـ `reopenWidget`. في حالتي، أضيف البيانات المتعلقة بالموضوع إلى مُسلسل topic\_view والوصول إليها أثناء تعديل المنشور على النحو التالي:

```plaintext
api.reopenWidget("post", {
          html(attrs) {
            let data_name = this.model.topic.data_name;

            // قم بعمل أشياء بالبيانات

            return this.attach("post-article", attrs);
          },
        });

```

كما ذكرت سابقًا، هناك على الأرجح الكثير من الأسباب لعدم كون هذه هي الطريقة الصحيحة للقيام بذلك، ولكنه يعمل لحالتي بأقل تأثير على أوقات التحميل.

لمن يسعون لإنجاز المهمة داخل JS لأي سبب كان، يبدو أن الكود ذي الصلة موجود في إضافة discourse-encrypt حيث يقومون بفك تشفير المنشورات، ولكني وجدت هذه الطريقة أسهل بكثير في التنفيذ: [discourse-encrypt/assets/javascripts/discourse/initializers/decrypt-posts.js at 255724ebc5fc3956f26beca09c1f7cb273d76eb2 · discourse/discourse-encrypt · GitHub](https://github.com/discourse/discourse-encrypt/blob/255724ebc5fc3956f26beca09c1f7cb273d76eb2/assets/javascripts/discourse/initializers/decrypt-posts.js)

---

_[View the full topic](https://meta.discourse.org/t/reopenwidget-with-ajax-call/246450)._
