الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[مشكلة] بعد الاستدعاء بالاجاكس.. لا يعمل اي كود جافا او حتى ال Tinymce

بدأه DeaD SouL في 24 أكتوبر 2008 · 15 رد · 4,033 مشاهدة · في قسم البرمجة بــ Javascript
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

اخواني الاعزاء.. لقد واجهتني عدة مشاكل لنفس السبب..

ملخص المشكله.. هو أنه : لدي صفحة بها نموذج ارسال يحتوي على كود جافاسكربت خاص بالمحرر TinyMCE وهو يعمل بشكل اكثر من ممتاز إن استدعيت الصفحة مباشرة..

ولكن متى تم استدعاء تلك الصفحه بواسطة الأجاكس.. فللأسف كود المحرر لا يعمل بتاتاً..!!

وأثناء بحثي في جوجل عن المشكلة وجدت هذه الوصلة Javascript not working in a file called by Ajax - SitePoint Forums التي تتكلم عن نفس المشكله.. كذلك حلها

ولكن كان الحل سطحي جدا

اقتباس:

اقتباس
Actually scripts loaded in Ajax request will not work unless you evaluate them.

أتمنى ان يساعدني بها من له دراية بالجافا وياحبذا لو كان من خلال الفريم وورك jQuery

أرحو من الاخوة المختصين الإفاده

وشكرا مقدما..

أعتذر وبشده عن انقطاعي.. وذلك بسبب مشروعي الجديد

-------------------

100(سبحان الله وبحمده، سبحان الله العظيم) = 0 سيئة

-------------------

dssighg7.png

#2

هل يمكك إرفاق الكود (كود الصفحة بدون التايني)؟

#3

عزيزي خالد

اي كود تقصد؟

كود ال php

ام كود صفحة الهتمل؟

ام كود الهيدر؟

الهيدر يشمل جميع ملفات الجافا التي استخدمها في السكربت

اما كود الهتمل فهو كود نموذج الارسال ويحتوي على كود جافا لاستدعاء التايني

اما كود البي اتش بي فهو لا يحتوي على اي كود هتمل او جافا فقط php

أعتذر وبشده عن انقطاعي.. وذلك بسبب مشروعي الجديد

-------------------

100(سبحان الله وبحمده، سبحان الله العظيم) = 0 سيئة

-------------------

dssighg7.png

#4

طيب أرسله كله وإذا في شيء خاص بالسكربت أرسله لي على الخاص

#5

عزيزي خالد

ملف الجافا الذي استخدمه في عمل الوصلات بالاجاكس هنا

وكذلك ملف التصميم للصفحه

+

الهيدر الذي يستدعي الملفات الاخرى والستايلات

في صفحة ال news_list.html

من السطر 177 الى 180

هو كود استدعاء الصفحة الاخرى بواسطة الاجاكس.. وهو مربوط بـ الـ jqGrid plugin

اما سفحة اضافة النموذج فستجده من السطر 3 الى السطر 80

ملاحظة: وسوم الهتمل مبنية على كلاس ضيف EasyTemplate

* فهي تحتوي على جمل شرطيه

* وسوم ال {vvv} تمثل متغيرات في الphp

اما بالنسبة لصفحة ال php فهي لا تحتوي على اي وسوم جافا او هتمل اي انها مفصوله تماما عن اللغات الاخرى

وليس لها اي عمل الا معالجة البيانات المرسلة من خلال النموذج في صفحة news_list.html

jsProb.tar.gz

أعتذر وبشده عن انقطاعي.. وذلك بسبب مشروعي الجديد

-------------------

100(سبحان الله وبحمده، سبحان الله العظيم) = 0 سيئة

-------------------

dssighg7.png

#6

ملاحظة مهمه جدا: الصفحة تعمل بشكل جيد دون اي مشكله اذا ما تم استدعاء الصفحة بطريقة مباشرة اي من خلال الرابط مثلا

http://localhost/news.php?add

ولكن اذا ماتم استدعائها عن طريق الاجاكس فان كود الجافا الموجود بالصفحه المستدعاة لا يعمل

تم تعديل هذه المشاركة بواسطة DeaD SouL في 24 أكتوبر 2008 في 19:54

أعتذر وبشده عن انقطاعي.. وذلك بسبب مشروعي الجديد

-------------------

100(سبحان الله وبحمده، سبحان الله العظيم) = 0 سيئة

-------------------

dssighg7.png

#7

السبب هو أنك لما تستدعي الصفحة مباشرة يقوم المتصفح بالتعرف على أكواد الجافا سكريبت وينفذها .

ولكن لما تستدعي جزء من الصفحة بالأجاكس وفي هذا الجزء بعض أكواد الجافا سيكريبت فإنه لا يتعرف عليها ولا ينفذها .

المحرر fckeditor يعمل بالأجاكس وبغيره لأنه يعتمد على frame في عملية نفيذه لأكواد الجافا سكريبت .

تحتاج إلى إجراء لتنفيذ أكواد الجافا سكريبت بعد اكتمال تحميل جزء من الصفحة .

اجعل التعليمة ( tinyMCE.init ) الموجودة في الصفحة في إجراء ونفذ الإجراء عند إكتمال التحميل .

تم تعديل هذه المشاركة بواسطة أبو محمد اللحياني في 24 أكتوبر 2008 في 20:22

ولو وافيت ربك دون ذنب *** وناقشك الحساب إذاً هلكتا

ولم يظلمك في عملٍ ولكن *** عسير أن تقوم بما حملتا

#8

ياريت لو توضح لي هالنقطه بمثال

اقتباس
اجعل التعليمة ( tinyMCE.init ) الموجودة في الصفحة في إجراء ونفذ الإجراء عند إكتمال التحميل

واكون شاكر لك يالغالي

أعتذر وبشده عن انقطاعي.. وذلك بسبب مشروعي الجديد

-------------------

100(سبحان الله وبحمده، سبحان الله العظيم) = 0 سيئة

-------------------

dssighg7.png

#9

أولاً أخي الكريم انت تستعمل كود للأجاكس ناقص الإمكانات ، من الأفضل أن تنتقل إلى استخدام إحدى المكتبات المشهورة في js مثل prototype أو jquery أو غيرهما فإمكانات هذه المكتبات الجاهزة كبيرة ومريحة في نفس الوقت .

سأعطيك كود بـ prototype.js

function open_tinyMCE(url, target) {
	new Ajax.Request(url, {
		method: 'get', 
		onComplete: function(response) {
			$(target).innerHTML = response.responseText;
			// start tinyMCE
			tinyMCE.init({
				// General options
				mode : "textareas",
				theme : "advanced",
				plugins : "safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iesp
ell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,pas
te,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,templ
ate",
				// Theme options
				theme_advanced_buttons1 : "newdocument,|,search,replace,|,bold,italic,underline,strikethrough,|,justify
left,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,f
ontsizeselect",
				theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,bullist,numlist,|,outdent,indent,blockq
uote,|,undo,redo,|,link,unlink,anchor,image,cleanup,code,|,insertdate,inserttime,
preview,|,forecolor,backcolor",
				theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespe
ll,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
				theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acron
ym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak",
				theme_advanced_toolbar_location : "top",
				theme_advanced_toolbar_align : "left",
				theme_advanced_statusbar_location : "bottom",
				theme_advanced_resizing : true,
				// Example content CSS (should be your site CSS)
				content_css : "css/content.css",
				// Drop lists for link/image/media/template dialogs
				template_external_list_url : "lists/template_list.js",
				external_link_list_url : "lists/link_list.js",
				external_image_list_url : "lists/image_list.js",
				media_external_list_url : "lists/media_list.js",
				file_browser_callback : "tinyBrowser",
				// Replace values for the template plugin
				template_replace_values : {
					username : "Some User",
					staffid : "991234"
				}
			});
		} // end fn onComplete
	}); // end Ajax.Request
} // end fn open_tinyMCE

فقط هذا الكود للتوضيح قد يعمل وقد لا يعمل .

ولو وافيت ربك دون ذنب *** وناقشك الحساب إذاً هلكتا

ولم يظلمك في عملٍ ولكن *** عسير أن تقوم بما حملتا

#10

الجواب موجود بموقع التايني

http://tinymce.moxiecode.com/examples/example_01.php

باختصار هو تابع:

toggleEditor('content');

content هو name لل textarea

أتمنى أن يعمل معك الآن ...

شوف هالمثال أيضاً مفيد جداً لك:

http://tinymce.moxiecode.com/examples/example_06.php

استخدام الأجاكس لتحميل الصفحة وكله بدون استعمال أي مكتبات فقط التايني

#11

شكرا جزيلا عزيزي خالد على الكود..

ولكنه لا يعمل..

اتمنى ان تخبرني باسم اي اضافة لل jQuery لكي احاول بها

اعلم ان اثقلت عليك..

ولكن يعلم الله مدى حاجتي له

دمت بود

أعتذر وبشده عن انقطاعي.. وذلك بسبب مشروعي الجديد

-------------------

100(سبحان الله وبحمده، سبحان الله العظيم) = 0 سيئة

-------------------

dssighg7.png

#12

اخي خالد اعلم اني اتعبتك معي كثيرا..

الف شكر لك عزيزي

ولكن للأسف تلك الدوال الموجوده في في موقع التايني لا يعمل الا اذا كان المحرر في الصفحه الاساسيه

اي ان تم استدعاء الصفحة التي تحتوي على المحرر فلا يعمل كود التايني..

والله دخت فعلا مع هذه المشكله............

أعتذر وبشده عن انقطاعي.. وذلك بسبب مشروعي الجديد

-------------------

100(سبحان الله وبحمده، سبحان الله العظيم) = 0 سيئة

-------------------

dssighg7.png

#13

الآن ضعت :S

خبرني بطريقة بسيييييطة عما تريد ...

#14

الحمدلله تم حل المشكله..

وشكرا جزيلا لكل من حاول مساعدتي..

المشكله كما قلت.. انه عند طلب الصفحه بالاجاكس لا يعمل كود الجافا...

لذلك بحثت عن بديل عن كود الاجاكس الذي استعمله بحيث انه يدعم خاصية الاحداث

onstart, onsuccess, oncomplete لذلك بحثت في إضافات ال jQuery

ولله الحمد والمنه وجدت إضافة أكثر من رائعه اسمها Ajaxify وكانت تدعم تلك الاحداث

لذلك جربت استدعاء الصفحه بالاجاكس عن طريق تلك الإضافة ووضعت استدعاء دالة

التايني في الحدث onSuccess وقد عمل بنجاح :]

وهذه المشكله ليست فقط للمحرر التايني.. بل لجميع اكواد الجافا التي تكون موجوده

في الصفحه المستدعاة بالاجاكس لذلك انصح وبشده باستعمال تلك الاضافه

شكرا جزيلا مرة اخرى على المساعده

تم تعديل هذه المشاركة بواسطة DeaD SouL في 25 أكتوبر 2008 في 14:16

أعتذر وبشده عن انقطاعي.. وذلك بسبب مشروعي الجديد

-------------------

100(سبحان الله وبحمده، سبحان الله العظيم) = 0 سيئة

-------------------

dssighg7.png

#15

جميل جداً

باستخدام jquery تنفذ كود السكربت الموجود بداخلها لوحدها (بالتحديد داخل onSuccess) ، بالمناسبة لا داعلي لاستخدام أي إضافة فال jquery تدعم بشكل أساسي الأجاكس وبدون إضافات

أما عند استخدامك للجافا سكربت لوحدها ستضطر لوضع كود السكربت داخل تابع eval

تم تعديل هذه المشاركة بواسطة خالد_الحوراني في 25 أكتوبر 2008 في 14:58

#16

بسم الله الرحمن الرحيم

لقد واجهت هذه المشكله عند بدء إستخدام الجافا سكريبت والأجاكس قبل فترة بسيطه فأنا جديد على هذه التقنيه , لا أعلم هل هذا الحل جيد أم لا ولكنه أفادني , ولا أعلم إذا كان هذا ماتريده أخ خالد أم لا ولكن عندما إستخدمت الأجاكس وجدت أن الإكسبلولر يقوم بجلب نفس الصفحة حتى لو قمت بالتعديل عليها أما المتصفحات الأخرى مثل فاير فوكس وجووجل كروم فهي تقوم بعمل ريفريش وتأتي بكل جديد يتم على الصفحة , لذلك فكرت في أن أقوم بعمل لينك جديد في كل مرة يتم الضغط فيها على الرابط

توضيح :

الرابط هو :

www.mysite.com/?id=1

الآن يجب أن أغير الرابط لكي أرى التعديلات التي تمت كما يلي

www.mysite.com/?id=1&any=1

أتمنى تكون الفكرة وصلت وللتوضيح أكثر هذا هو الكود النهائي لحل هذه المشكله

<html>
<head>
<title>Ajax at work</title>
<script language = "javascript">
var XMLHttpRequestObject = false;
if (window.XMLHttpRequest) {
XMLHttpRequestObject = new XMLHttpRequest();
} else if (window.ActiveXObject) {
XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
}
function getData(dataSource, divID)
{

/*هنا الفكرة عمل متغير يأخذ قيم راندوم */
var Scu=Math.floor(Math.random()*10000001)
dataSource=dataSource+"&Scu="+Scu;

if(XMLHttpRequestObject) {
var obj = document.getElementById(divID);
XMLHttpRequestObject.open("GET", dataSource);
XMLHttpRequestObject.onreadystatechange = function()
{

if (XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200) {
obj.innerHTML = XMLHttpRequestObject.responseText;
}else{
   obj.innerHTML = "<img src=\"/images/loading.gif\" /> Loading... ";
}
}
XMLHttpRequestObject.send(null);
}
}
</script>

<img src="/images/loading.gif" />

<H1>Fetching data with Ajax</H1>
<form>
<input type = "button" value = "Display Message"
onclick = "getData('?a=1','targetDiv')">
</form>
<div id="targetDiv">
<p>The fetched data will go here.</p>
</div>

</head>
<body>

تعديل : ملفات البروتوتايب وغيرها حجمها كبير جدا وبالنسة إلي بفضل أكون على اطلاع وفهم كامل لكل سطر كود في موقعي.

تعديل ثاني : أنا الحين قرأت الموضوع مره ثانية ولقيت إنكم لقيتوا الحل وإنو المطلوب تنفيذ كود جافاسكريبت مستدعى بصفحة أجاكس وإني أنا الظاهر فاهم الموضوع غلط أو إني نعسان ومش صاحي والظاهر وإلى الآن لم أكتشف إنو إللي سائل مش الأخ خالد !!! على كل بس أصحى بشوف الموضوع مرة ثانيه وبتأكد شو التخابيص إلي سويتها

تصبحوا على ذكر الرحمن

تم تعديل هذه المشاركة بواسطة bastr3 في 29 أكتوبر 2008 في 04:05

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…