-
المساهمات
3552 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
34
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو سمير عبود
-
ماهي نتيجة الطلب الذي تُرسله لأن الخطأ 500 ليس متعلق بشيء محدد، حتى نستطيع المساعدة يُرجى تفصيل و شرح المشكلة بشكل أكبر
- 12 اجابة
-
- 1
-
إستخدم الدالة on بدل live لأن هذه الأخيرة تم إهمالها و إستبدالها ب on لاحظ المثال التالي: <select name="name" id="name"> <option value="" disabled>Select option</option> <option value="value1">option 1</option> <option value="value2">option 2</option> <option value="value3">option 3 </option> </select> <input type="text" name="firstname" id="firstname"> <script> $(document).ready(function() { $("#name").on("change", function() { $("#firstname").val($(this).val()); }); }); </script> و هو يعمل بشكل جيد يُمكنك تجربته على codepen:
-
يوفر Laravel طريقة ممتازة للربط بحدث معين في تطبيقك أو مشروعك باستخدام الأحداث (events) والمستمعين (listeners). ستتيح لك هذه الميزة الاشتراك والاستماع إلى الأنشطة المختلفة التي حدثت في التطبيق الخاص بك. ببساطة ، فكر في الحدث على أنه شيء حدث في تطبيقك والمستمعين كمجموعة من المنطق للرد بها على ذلك الحدث. لذلك ، يتيح هذا للمطورين ، إصدار إعلانات داخل التطبيق بحدوث شيء ما وتنفيذ مجموعة من العمليات بناءً على هذا الحدث المحدد. نتيجة لذلك ، ستساعد الأحداث والمستمعون بشكل أكبر في تبسيط أكوادنا وإعادة بناء المهام المعقدة. قد تسأل لماذا نستخدم هذه الخصائص ! تُساعد هذه الخصائص كثيراً في تحقيق مبادئ تصميم البرمجيات (SOLID) حيث أن أحد هذه المبادئ مبدأ SRP اي Single Responsibility Principle و يعني ببساطة أن كل وحدة او كلاس أو دالة يجب عليها أن تقوم بمسؤولية واحدة فقط. قد نرغب في تطبيقنا عند إنشاء منشور ما أن نُرسل إشعار إلى كافة المستخدمين عن طريق البريد الإلكتروني بوجود منشور جديد: نقوم بإنشاء الحدث و المستمع عن طريق الأمر: php artisan make:event PostCreated php artisan make:listener NotifyPostCreated --event="PostCreated" سيُنشئ الأمر أعلاه ملف للحدث بالإسم PostCreated بداخل المسار app/Events و ملف للمستمع بالإسم NotifyPostCreated بداخل المسار app/Listeners بعد ذلك ، تحتاج إلى تسجيل الأحداث والمستمعين في ملف EventServiceProvider.php. في المسار app/Providers: use App/Events/PostCreated; use App/Listeners/NotifyPostCreated; //... /** * The event listener mappings for the application. * * @var array */ protected $listen = [ //... PostCreated::class => [ NotifyPostCreated::class, ], ]; في المصفوفة listen$ مع إستدعاء الكلاسات في الأعلى. الآن بعد أن قمنا بإعداد الأحداث والمستمعين ، كل ما تبقى هو تحديد بعض المنطق داخل الحدث والمستمع. ثم ، أخيرًا إرسال الحدث. أولاً ، لنبدأ بفئة الحدث PostCreated التي أنشأناها سابقًا. ما نريده هو إخطار المستخدمين في كل مرة يتم فيها إنشاء منشور جديد. لذلك ، سنحتاج إلى تمرير كائن post الفعلي إلى باني الفئة PostCreated هذه. سنتعلم كيفية إرسال حدث في وقت لاحق ، ولكن الغرض من ذلك هو إتاحة الوصول إلى الكائن post بين جميع المستمعين. # app/Events/PostCreated.php <?php namespace App\Events; .... use App\Post; class PostCreated { use Dispatchable, InteractsWithSockets, SerializesModels; public $post; /** * Create a new event instance. * * @return void */ public function __construct(Post $post) { $this->post = $post; } } ثانيًا ، ستحتفظ فئة المستمع NotifyPostCreated بالمنطق الفعلي لإرسال البريد الإلكتروني إلى المستخدمين. لاحظ أن هناك تابع handle، هذا هو التابع الذي سيتم استدعاؤه بواسطة الحدث وضمن هذا التابع سنكتب كل الكود اللازم لإرسال البريد الإلكتروني # app/Events/NotifyPostCreated.php <?php namespace App\Listeners; use App\Events\PostCreated; use App\User; use Mail; class NotifyPostCreated { .... .... /** * Handle the event. * * @param PostCreated $event * @return void */ public function handle(PostCreated $event) { // Access the post using $event->post... $users = User::all(); foreach($users as $user) { Mail::to($user)->send('emails.post.created', $event->post); } } } يرجى ملاحظة أنني استخدمت واجهة Mail لإرسال بريد إلكتروني وقمت بتهيئة بيانات اعتماد البريد وفقًا لذلك وأنشأت أيضًا ملفًا لمحتوى البريد الإلكتروني في Resources / views / emails / post / created.blade.php. يُمكن أيضاً إنشاء صنف Notification للتعامل مع الإشعار بشكل مبسط بحيث تُصبح عملية الإخطار بالشكل التالي: $users = User::all(); foreach($users as $user) { $user->notify(new PostCreatedNotification($post)); } الخطوة الأخيرة هي تشغيل حدث PostCreated أو إطلاقه. كل ما علينا فعله هو استخدام المساعد event . سيرسل هذا المساعد الحدث إلى جميع مستمعيه المسجلين. # app/Http/Controllers/PostController.php <?php namespace App\Http\Controllers; use App\Events\PostCreated; use App\Http\Controllers\Controller; use App\Post; class PostController extends Controller { //... public function store(Request $request) { // post storing logic... event(new PostCreated($post)); } } بدلاً من ذلك ، إذا كان حدثك يستخدم Dispatchable trait ، فيمكنك استدعاء التابع الثابت dispatch بهذا الشكل: //... public function store(Request $request) { // post storing logic... PostCreated::dispatch($post); } إفتراضياً لارفل تستخدم نفس العملية عند تسجيل مستخدم جديد لإرسال بريد إلكتروني لتأكيد الحساب.
- 1 جواب
-
- 1
-
بإمكانك إستخدام select لتحديد الحقول التي تريدين جلبها مثلاً: $projects = auth()->user() ->projects() ->select('field1', 'field2') ->get(); و في هذه الحالة سيتم جلب كافة مشاريع العضو الحالي على شكل مجموعة كائنات من الصنف Project و كل كائن لديه خاصيتين هما الحقلين الذين تم تحديدهما.
- 4 اجابة
-
- 1
-
لجمع عناصر كل صف لوحده و كل عمود لوحده نستخدم حلقتين متداخلتين حيث في جمع الصف نجعل الحلقة الخارجية للصفوف و الحلقة الداخلية للأعمدة. أما في جمع عناصر العمود نجعل الحلقة الخارجية للأعمدة و الداخلية للصفوف أي العكس و هذا مثال تطبيقي على الأمر: public class Main { public static void main(String[] args) { int rows, cols, sumRow, sumCol; int a[][] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; rows = a.length; cols = a[0].length; //Calculates sum of each row of given matrix for(int i = 0; i < rows; i++){ sumRow = 0; for(int j = 0; j < cols; j++){ sumRow += a[i][j]; } System.out.println("Sum of " + (i+1) +" row: " + sumRow); } //Calculates sum of each column of given matrix for(int i = 0; i < cols; i++){ sumCol = 0; for(int j = 0; j < rows; j++){ sumCol += a[j][i]; } System.out.println("Sum of " + (i+1) +" column: " + sumCol); } } } سيكون الخرج للمثال اعلاه كالتالي: Sum of 1 row: 6 Sum of 2 row: 15 Sum of 3 row: 24 Sum of 1 column: 12 Sum of 2 column: 15 Sum of 3 column: 18 أما لإنشاء مصفوفة و ملئها بمدخلات المستخدم نحتاج إلى إستخدام الحزمة Scanner كما هو موضح في المثال: import java.util.Scanner; public class Main { public static void main(String args[]){ System.out.print("Enter 2D array size : "); Scanner sc=new Scanner(System.in); int rows=sc.nextInt(); // قراءة عدد الصفوف int columns=sc.nextInt(); // قراءة عدد الأعمدة System.out.println("Enter array elements : "); int twoD[][]=new int[rows][columns]; // إنشاء المصفوفة بالحجم الذي أدخله المستخدم // ملء المصفوفة بالعناصر for(int i=0; i<rows;i++) { for(int j=0; j<columns;j++) { twoD[i][j]=sc.nextInt(); // قراءة العدد و تخزينه في مكانه } } // طباعة العناصر التي أدخلها المستخدم System.out.print("\nData you entered : \n"); for(int []x:twoD){ for(int y:x){ System.out.print(y+" "); } System.out.println(); } } } ستكون نتيجة تنفيذ البرنامج أعلاه كالتالي: Enter 2D array size : 3 3 Enter array elements : 1 2 3 4 5 6 7 8 9 Data you entered : 1 2 3 4 5 6 7 8 9 بإمكانك دمج المثالين مع بعض للحصول على برنامج واحد كما تريد يُمكنك الإطلاع على مفهوم المصفوفات ثنائية البعد بشكل موسع من خلال المقال: المصفوفات ثنائية البعد (Two-dimensional Arrays) في جافا
- 1 جواب
-
- 1
-
- 12 اجابة
-
- 1
-
يُمكنك حل المشكلة كالتالي: .app-sidebar { /* ... */ overflow: auto; /* سيتم عرض شريط تمرير في حالة تجاوز المحتوى الأبعاد الخاصة بالعنصر */ /* ... */ padding-bottom: 60px; /* إضافة حشوة بمقدار 50 بيكسل من الأسفل */ /* ... */ }
-
من خلال الرسالة التي ظهرت و التي توضح أن تعليمة foreach تحتاج أن يكون المعامل الذي يتم تمريره لها من النوع مصفوفة أو كائن لكن يبدو أنه يتم تمرير قيمة بوليانية أو منطقية أو متغير يحمل قيمة منطقية لكن من خلال الأكواد التي قمتِ بإرفاقها لم يتبين ذلك. هل بإمكانك توضيح الخطأ او المشكلة بشكل أكبر حتى نستطيع المساعدة، يُمكن أيضاً أن الإطار يعمل بنُسخة مخزنة سابقاً من صفحات العرض لذلك لم يأخذ التعديلات الجديدة بعين الإعتبار يُمكنك عمل clear لصفحات العرض من خلال تنفيذ الأمر: php artisan view:clear
-
نعم بالطبع فالتعليمات ستتنفذ بالترتيب سيطبع أولا قيمة العداد ثم سيتحقق من الشرط أي إذا وصلت قيمة العداد إلى القيمة 10 سيطبع ما قلت له أن يطبعه في حال تحقق الشرط. و هذا عمل الحلقات التكرارية أي ان التعليمات التي أردناها أن تكرر لعدد ما ستتنفذ بشكل متكرر إلى حين إنتهاء الحلقة هذا المثال الذي أرفقته بلغة جافاسكربت: for(var i = 1; i <= 10; i++) { console.log(i); if(i === 10) console.log("الصلاة و السلام على سيدنا محمد"); } المثال أعلاه إستخدمنا الحلقة for و العداد i يبدأ من 1 إلى حين أن تتساوى قيمته بالعدد 10 و سيُضاف واحد لقيمته كل دورة للحلقة و في كل دورة يتم تنفيذ أمر طباعة و تحقق و هذا ناتج التنفيذ: 1 2 3 4 5 6 7 8 9 10 الصلاة و السلام على سيدنا محمد ستُلاحظ أنه طبع عبارة الصلاة و السلام على سيدنا محمد و أنهى الحلقة لأن شرط إنتهاء الحلقة قد تحقق. فقيمة i أصبحت 11 و 11 أكبر من 10.
-
يُمكنك الوصول إلى ما تريد ببساطة بإستخدام: n = 123456789 print('{:,}'.format(n)) # من أجل إصدار أكبر من 2.7 print(f'{n:,}') # من أجل إصدار أكبر من 3.6
- 4 اجابة
-
- 1
-
يُمكنك كتابة أسطرك البرمجية و فصل الأسطر بإستخدام الأقواس بدون أية مشاكل مثلاً: x = (1 + 2 + 3 + 4 + 5) print(x) # 15 أو يُمكنك فصل الخط بشكل صريح بإستخدام علامة \ في حالتك: x = 1 + 2 + 3 + \ 4 + 5 print(x) # 15 إن كنت ستستخدم علامة \ في نهاية السطر يجب أن تكون الأخيرة و ليس بعدها مسافات فارغة او تابات فهذا سيُعطي خطأ: SyntaxError: unexpected character after line continuation character
- 2 اجابة
-
- 1
-
يُمكن للدالة range التعامل مع الأعداد الصحيحة فقط أي لا يُمكن تمرير معاملات بقيم بفاصلة عشرية و إنما يُمكن الوصول لما تريد بعدة طرق من بينها: إستخدام list comprehension: print([x/10 for x in range(0, 10)]) # [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9] إستخدام دالة linspace من مكتبة numpy: import numpy as np print(np.linspace(0,1,10,endpoint=False)) # [0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9] إستخدام الدالة arange من مكتبة numpy تتيح لك تحديد الخطوة بالفاصلة العشرية: import numpy as np print(np.arange(0.0, 1.0, 0.1)) # [0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9] يُمكن إنطلاقاً من الطريقة الأولى إنشاء دالة لتوليد قائمة مع تمرير المعاملات: def seq(start, stop, step=1): n = int(round((stop - start)/float(step))) if n > 1: return([start + i / pow(step, -1) for i in range(n+1)]) elif n == 1: return([start]) else: return([]) print(seq(1, 2)) # [1] print(seq(10, 0, -2)) # [10, 8, 6, 4, 2, 0] print(seq(0, 5, -1)) # [] print(seq(0, 1, 0.1)) # [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
- 4 اجابة
-
- 1
-
ارجو أن تُحدد في سؤالك ماذا تريد بالضبط حتى نستطيع تقديم المساعدة بشكل دقيق إذا كنت تريد الإستعلام عن أكثر اسم مكرر و ليكن إسم الحقل هو name و الجدول الذي تريد الإستعلام منه هو users يُمكنك إستخدام الإستعلام التالي لجلب أكثر إسم مكرر: <?php $query = "SELECT name, COUNT(name) as c from users GROUP BY name ORDER BY COUNT(name) DESC LIMIT 1"; $result = mysqli_query($db, $query); if ($result) { $row = mysqli_fetch_assoc($result); print_r($row); } أما إن كنت تريد الأقل تكراراً فبدل الترتيب التنازلي نستخدم الترتيب التصاعدي : <?php $query = "SELECT name, COUNT(name) as c from users GROUP BY name ORDER BY COUNT(name) ASC LIMIT 1"; // أو $query = "SELECT name, COUNT(name) as c from users GROUP BY name ORDER BY COUNT(name) LIMIT 1";
-
يُمكنك إستخدام الدالة: array_count_values التي تُعيد عدد المرات التي يظهر فيها كل عنصر في المصفوفة على سبيل المثال: <?php $superm= array('محمد','رضا','أبراهيم','محمد','محمد','رضا','محمد'); $values = array_count_values($superm); print_r($values); سيُعطي النتيجة: Array ( [محمد] => 4 [رضا] => 2 [أبراهيم] => 1 ) ثم إستخدام الدالة arsort لترتيب المصفوفة التي تحصلنا عليها بشكل عكسي حسب عدد التكرارات. <?php $superm= array('محمد','رضا','أبراهيم','محمد','محمد','رضا','محمد'); $values = array_count_values($superm); arsort($values); print_r($values); سنحصل على النتيجة: Array ( [محمد] => 4 [رضا] => 2 [أبراهيم] => 1 ) تحصلنا على نفس النتيجة لأن محمد يأتي أول الترتيب في المصفوفة المعطاة و رضا يأتي ثانياً لو جعلنا على سبيل المثال ابراهيم أولا لحصلنا على نتيجتين مختلفتين. ثم للحصول على المفاتيح فقط أي محمد و رضا و ... نستخدم الدالة array_keys التي سترجع مصفوفة تضم الأسماء حيث أول عنصر هو الأكثر تكرار و آخر عنصر هو الأقل تكرار: <?php $superm= array('محمد','رضا','أبراهيم','محمد','محمد','رضا','محمد'); $values = array_count_values($superm); arsort($values); print_r($values); /* Output: Array ( [0] => محمد [1] => رضا [2] => أبراهيم ) */
-
ال polymorphism أو تعدد الأشكال هو أحد المبادئ الأربعة للبرمجة كائنية التوجه و هو لا يتعلق بلغة جافا بحد ذاتها و إنما يتعلق بالبرمجة كائنية التوجه كأسلوب، و أي لغة تعتمد هذا الأسلوب يُمكنها إستخدام هذا المبدأ. و ببساطة يعني أنه يُمكننا الوصول لعدة أشكال إنطلاقاً من شيء مُعين. و ينقسم إلى نوعين: static polymorphism او Compile time Polymorphism يُعرف أيضًا باسم تعدد الأشكال الثابت. يتم تحقيق هذا النوع من تعدد الأشكال عن طريق التحميل الزائد للوظيفة (Method overloading) أو التحميل الزائد للعوامل (operator overloading) . لكن Java لا تدعم التحميل الزائد للعوامل. Method Overloading: عندما تكون هناك وظائف متعددة بنفس الاسم ولكن مع وسائط مختلفة ، يُقال إن هذه الوظائف محملة بشكل زائد. يمكن زيادة تحميل الوظائف عن طريق التغيير في عدد الوسائط اوالتغيير في نوع الوسائط. مثال: بإستخدام نوع مختلف للوسائط class MultiplyFun { // Method with 2 parametera type int static int multiply(int a, int b) { return a * b; } // Method with the same name but 2 double parameters static double multiply(double a, double b) { return a * b; } } class Main { public static void main(String[] args) { System.out.println(MultiplyFun.multiply(3, 2)); // 6 System.out.println(MultiplyFun.multiply(5.5, 6.3)); // 34.65 } } مثال بإستخدام عدد مختلف من الوسائط: class MultiplyFun { // Method with 2 parameter static int multiply(int a, int b) { return a * b; } // Method with the same name but 3 parameter static int multiply(int a, int b, int c) { return a * b * c; } } class Main { public static void main(String[] args) { System.out.println(MultiplyFun.multiply(2, 4)); // 8 System.out.println(MultiplyFun.multiply(2, 3, 4)); // 24 } } لاحظ أنه في كل من المثالين وصلنا إلى أشكال مختلفة لكن من نفس الشيء و هو الوظيفة multiply. يُسمى هذا النوع ب Compile time Polymorphism لانه في وقت الترجمة المُترجم يكون لديه القدرة على تحديد الوظيفة التي ستتنفذ. Runtime polymorphism او يُعرف أيضًا باسم إرسال الوظيفة الديناميكية. وهي عملية يتم فيها حل استدعاء الدالة في وقت التشغيل. يتم تحقيق هذا النوع من تعدد الأشكال عن طريق إعادة تعريف الدوال (Method Overriding). Method Overriding: يحدث عندما يكون للفئة المشتقة (derived class) تعريف لإحدى الوظائف في الفئة الأساسية (base class). يقال إن هذه الوظيفة الأساسية تمت إعادة تعريفها او تم تجاوزها: class Parent { void print() { System.out.println("Parent class"); } } class Child1 extends Parent { void print() { System.out.println("Child 1 class"); } } class Child2 extends Parent { void print() { System.out.println("Child 2 class"); } } class TestPolymorphism { public static void main(String[] args) { Parent a; a = new Child1(); a.print(); // Child 1 class a = new Child2(); a.print(); // Child 2 class } } لاحظ أن الوظيفة print تم إعادة تعريفها في الفئات الأبناء و الكائن a الذي أنشأناه هو كائن من النوع Parent و سيتم تحديد أي وظيفة print سيتم إستدعاؤها وقت التشغيل لذلك يُسمى هذا النوع ب Runtime polymorphism. يُمكنك الإطلاع على هذا المقال للحصول على معلومات أكثر: الوراثة والتعددية الشكلية (Polymorphism) والأصناف المجردة (Abstract Classes) في جافا
- 3 اجابة
-
- 1
-
أعتقد أنه لديك مُشكلة في الإستعلام الذي يتم تنفيذه يُمكنك عرض الأخطاء في حالة حدوثها بإستخدام: mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); في ملف الإتصال، حيث إذا أضفته و جربت إرسال البيانات سيعرض لك رسالة تُخبرك بوجود خطأ ما في الإستعلام. سبب الخطأ هو وجود الكلمة group في الإستعلام حيث أن هذه الكلمة تُعتبر كلمة محجوزة في لغة sql لذلك في هذه الحالة يجب إحاطة الكلمة ب علامتي إقتباس مائلة `group` كما يُمكنك إحاطة كل الحقول بهذه العلامات ليُصبح الإستعلام بهذا الشكل: $query = "INSERT INTO `messages_groups` (`sender_id`, `sender_name`, `picture`, `group`, `message`) VALUES ('".$sender_id."', '".$sender_name."','".$picture."','".$group."','".$message."')";
- 1 جواب
-
- 2
-
يبدو أنك أخطأت في شيء ما عند جلب البيانات من القاعدة سأرفق لك الملفين يعملان بشكل سليم: index.php response.php أضفت جدول في أسفل الإستمارة سيحتوي على كافة البيانات و عند إضافة سجل جديد سيظهر صف آخر في الجدول دون الحاجة لتحديث الصفحة.
- 5 اجابة
-
- 2
-
حاول تعديل كود الجيكويري المسؤول عن إرسال البيانات بهذا الشكل: $(document).ready(function() { //##### Add record when Add Record Button is click ######### $("#content-form").submit(function(e) { e.preventDefault(); //build a post data structure var message = $("#mymessage").val(), name = $("#myname").val(), email = $("#myemail").val(); if (name == '' || email == '' || message == '') { alert("All fields are required"); return false; } jQuery.ajax({ type: "POST", // Post / Get method url: "response.php", //Where form data is sent on submission dataType: "text", // Data type, HTML, json etc. data: { name: name, email: email, message: message }, //Form variables success: function(response) { $("#responds").append(response); $('#content-form').trigger('reset'); }, error: function(xhr, ajaxOptions, thrownError) { alert(thrownError); } }); }); }); حيث أن خصائص الكائن data هي ما ستستقبله في المتغير العام POST_$ و تضيف الحقول الجديدة لإستعلام التخزين: <?php //include db configuration file include_once("config.php"); if(isset($_POST["message"]) && strlen($_POST["message"])>0) { $name = mysqli_real_escape_string($connecDB, $_POST["name"]); $email = mysqli_real_escape_string($connecDB, $_POST["email"]); $message = mysqli_real_escape_string($connecDB, $_POST["message"]); $query = "INSERT INTO add_delete_record(name, email, message) VALUES ('".$name."', '".$email."','".$message."')"; if(mysqli_query($connecDB, $query)) { echo '<p>You have entered</p>'; echo '<p>Name:'.$name.'</p>'; echo '<p>email:'.$email.'</p>'; echo '<p>Message : '.$message.'</p>'; } } ?>
- 5 اجابة
-
- 2
-
يُسمى هذا العامل عامل التفكيك أو عامل الإنتشار ( Spread Operator ) و هذه بعض الأمثلة التي يُستخدم فيها في جافاسكربت و كيف نستخدمه في بايثون: عوامل دالة: ( Function Arguments ) جافاسكربت: function multiply(a, b) { return a * b; } const numbers = [2, 5]; console.log(multiply(...numbers)); // 10 بايثون: def multiply(a, b): return a * b numbers = [2, 5] print(multiply(*numbers)) # 10 تفكيك عناصر مصفوفة في مصفوفة أخرى: ( Array Literals ) جافاسكربت: const numbers = [1, 2, 3]; const newNumbers = [0, ...numbers, 4] console.log(newNumbers); // [ 0, 1, 2, 3, 4 ] بايثون: numbers = [1, 2, 3] new_numbers = [0, *numbers, 4] print(new_numbers) # [0, 1, 2, 3, 4] تفكيك كائن في كائن آخر: ( Object Literals ) جافاسكربت: const testObj = { foo: 'bar' }; console.log({ ...testObj, foo2: 'bar2' }); // { foo: 'bar', foo2: 'bar2' } بايثون: test_obj = { 'foo': 'bar' } print({ **test_obj, 'foo2': 'bar2' }) # {'foo': 'bar', 'foo2': 'bar2'} أسلوب rest parameters الذي يسمح بتمرير عدد غير محدد من العوامل لدالة ما: جافاسكربت: function sum(...numbers) { let t = 0; for(num of numbers) t += num; return t; } console.log(sum(1, 2, 3, 4, 5)) // 15 بايثون: def sum(*numbers): t = 0; for num in numbers: t += num; return t; print(sum(1, 2, 3, 4, 5, 6)) # 21
- 4 اجابة
-
- 1
-
يُمكنك إرسال البيانات بالشكل التالي: $.ajax({ ... data : { foo : 'bar', bar : 'foo' }, ... }); في حالتك تقوم بجلب القيم من حقول الإدخال و تُخزنها في متغيرات ثم تمررها لكائن data: var contentText = 'content_txt='+ $("#contentText").val(), name = $("#myname").val(), email = $("#myemail").val(); $.ajax({ //... data : { name: name, email: email, content: contentText}, //... }); و في ملف المعالجة يُمكنك الحصول على البيانات من خلال المتغير العام POST_$ يُمكن إستخدام الطريقة التالية ايضاً: $("#content-form").submit(function (e) { e.preventDefault(); $.ajax({ //... data: $('#content-form').serialize(), //... }); });
- 5 اجابة
-
- 2
-
نعم أدري أن هناك علاقة في النموذج Student بالإسم absence_list و تعيد مجموعة كائنات لكن ما السبب الذي يستدعي لعمل عناصر بهذا الشكل: <div class="badge-success badge-success badge-warning badge-warning badge-warning badge-warning badge-warning badge-success badge student-token" data-token="student_token">