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

درس شرح xmlhttp مع php

مغلق
بدأه الحسين في 23 نوفمبر 2004 · 0 رد · 4,282 مشاهدة · في أرشيف قسم منتدى PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1

ولتوضيح الأمر سوف أقوم بعرض مثال يوضح طريقه التفكير بهذا الإسلوب

وينقسم هذا المثال إلي صفحتين وهما

الصفحه index.htm : وهي تستخدم لعرض البيانات فقط , من خلال إرسال طلبات Requests للسيرفر .

الصفحه members.php : وهي صفحه من المفترض أنها غير قابله للعرض في المتصفح (اي ليست إلا مصدر لإرجاع البيانات فقط )

دعنا نعرض محتوي كلا من هذه الصفحات

الصفحه members.php

<?
$listIndex = $HTTP_RAW_POST_DATA;
switch( $listIndex ) {
    case 0:
        $memberName = "راكان الحنيطي";
        break;
    case 1:
        $memberName = "مصطفي جميل صوان";
        sleep(3); /* sleep for 3 seconds just for simulation */
        break;
    case 2:
        $memberName = "الحسين محمد";
        break;
    default:
        $memberName = "غير معرف";
        sleep(1);
}

$str  = "<member>";
$str .= "<index>$listIndex</index>";
$str .= "<name>$memberName</name>";
$str .= "</member>";

// send the data on the header
header("XMLData: $str");
?>

دعنا الأن نشرح محتوي الكود

$listIndex = $HTTP_RAW_POST_DATA;

يقوم هذا الكود بتحميل قيمة المتغير listIndex بالقيمه المرسله من خلال وظائف xmlhttp الموجوده بالصفحه index.htm كما سنري

وبعد ذلك يتم إرسال بيانات بصيغة xml علي ال header باسم XMLData

إلي الصفحه التي أرسلت طلب Request إلي الصفحه members.php (وهي الصفحه index.htm) كما يلي

$str  = "<member>";
$str .= "<index>$listIndex</index>";
$str .= "<name>$memberName</name>";
$str .= "</member>";

// send the data on the header
header("XMLData: $str");

دعنا الأن نعرض محتوي الصفحه index.htm ( و بالطبع يمكننا أن نجعلها صفحة php أي تكون index.php)

<script>
var intervalID;

// doFillProcess
function doFillProcess(element) {
    element.disabled = true;
    intervalID = window.setInterval("sendRequest()", 250);
}

// sendRequest
function sendRequest() {
    var memberListBoxObj = document.getElementById("memberListBox");
    memberListBoxObj.options[memberListBoxObj.length] = new Option("جاري تحميل البيانات ...", "");
    memberListBoxObj.options[memberListBoxObj.length-1].style.background = "yellow";

    var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    xmlhttp.open("POST", "members.php", true);

    xmlhttp.onreadystatechange = function() {
        if ( xmlhttp.readyState == 4 ) {
            var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
            xmldoc.loadXML( xmlhttp.getResponseHeader("XMLData") );

            var index = xmldoc.documentElement.selectSingleNode("index").text;
            var memberName = xmldoc.documentElement.selectSingleNode("name").text;

            memberListBoxObj.options[index].text = memberName;
            memberListBoxObj.options[index].style.background = "white";
        }
    }

    // send request to the server page
    xmlhttp.send(memberListBoxObj.length-1);

    if( memberListBoxObj.length > 3 ) {
        window.clearInterval(intervalID);
    }
}
</script>

<div dir=rtl>
 <input type=button value=" عرض أعضاء المشروع " onclick="doFillProcess(this)">
 <br><br>
 <select id="memberListBox" size=6 multiple  style="width:300;"></select>
</div>

ويتلخص الكود في وظائف الكائن XMLHTTP في التالي

لإنشاء كائن من نوع XMLHTTP نقوم بعمل التالي

    var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

ولتحديد بيانات الطلب request يتم ذلك من خلال الوظيفه open

ومن خلالها نحدد نوع إرسال البيانات أما Get أو POST ,

ونحدد اسم الصفحه التي سوف يرسل إليها الطلب وهي members.php

ثم نحدد للداله open طريقه إستقبال ال Response المرسل من الصفحه members.php هل هو إسلوب متزامن synchronous أم غير متزامن asynchronous

فعندما مقول أن القيمه سوف تكون false اي أن نوع إستقبال البيانات من النوع المتزامن synchronous اي ان الكود لن ينتقل إلي السطر التالي لكود إرسال الطلب إلا بعد وصول كل البيانات

وعندما تكون القيمه true اي أن نوع إرسال البيانات من النوع غير المتزامن asynchronous وبذلك لن يتعطل الكود منتظرا إستقبال جميع البيانات

ولكن سوف يعتمد علي الخاصيه readyState التابعه للكائن xmlhttp حيث أن هذه الخاصيه سوف تتغير من وقت لأخر وسوف تأخذ عده قيم كما يلي

القيمه 0 --> القيمه الأفتراضيه عند إنشاء كائن من نوع xmlhttp

القيمه 1 --> عند إستدعاء الوظيفه open يتم تغير قيمة الخاصيه readyState إلي 1

القيمه 2 --> عند إستدعاء الوظيفه send يتم تغير قيمة الخاصيه readyState إلي 2 , وفي هذه المرحله يتم تحميل البيانات loading ويكون الطلب request المرسل غير متاح

القيمه 3 --> فيها يكون قد تم إرسال جزء من البيانات

القيمه 4 --> فيها يكون قد تم إرسال كل البيانات

    xmlhttp.open("POST", "members.php", true);

وعندما تتغير قيمه الخاصيه readyState يتم إستدعاء الحدث onreadystatechange

وعندما تصبح قيمة الخاصيه readyState تساوي 4 بذلك تكون البيانات قد وصلت بشكل كامل

    xmlhttp.onreadystatechange = function() {
        if ( xmlhttp.readyState == 4 ) {
            var xmldoc = new ActiveXObject("Microsoft.XMLDOM");
            xmldoc.loadXML( xmlhttp.getResponseHeader("XMLData") );

            var index = xmldoc.documentElement.selectSingleNode("index").text;
            var memberName = xmldoc.documentElement.selectSingleNode("name").text;

            memberListBoxObj.options[index].text = memberName;
            memberListBoxObj.options[index].style.background = "white";
        }
    }

ولإرسال البيانات نقوم بإستدعاء الوظيفه send ونمرر لها القيمه المراد إرسالها

    // send request to the server page
    xmlhttp.send(memberListBoxObj.length-1);

وباقي الأكود أظن أنها واضحه

وقد أرفقت هنا ملف به المثال المشروح بالإضافه إلي ملف المساعده للكائن xmlhttp من ال MSDN

Xmlhttp.rar

29_5.gif

سورة العنكبوت

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

مشروع Arabic PHP.NET

حلم طالما كان يراودني حتي قهرته بحمد الله ليكون حقيقة

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

سلسلة أنماط التصاميم البرمجية Desgin Patterns

سلسلة أنماط التصاميم البرمجية Desgin Patterns | كتيب هذه الدروس (إعداد أحمد غريب)

ـــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــــ

كنترول ASP.NET DataGrid CheckBoxColumn

كنترول ProgressBar

كنترول UltraPanel

مشروع الكنترول الأنيق (إهداء للفريق العربي)

الورش الإلكترونية IT Workshops

تعقب الأخطاء error tracing

كنترول ColorPicker لمطوري الويب

RichTextBox Control لمطوري ال ASP.Net

حمل كتاب جافا سكربت عربي

هذا الموضوع مغلق.

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