في الإنترنت اليوم، لم تعد AJAX كلمة غير مألوفة. عند الحديث عن AJAX، قد يتبادر إلى الذهن على الفور XML الذي ظهر بسبب RSS. ربما لم يعد تحليل XML يمثل مشكلة، خاصة مع PHP5 وظهور عدد كبير من موزعي XML، مثل SimpleXML الخفيف الوزن. ومع ذلك، بالنسبة لـ AJAX، يميل تحليل XML أكثر إلى دعم Javascript للواجهة الأمامية. أعتقد أن كل من قام بتحليل XML سوف يرتبك بسبب الأشجار والعقد. لا يمكن إنكار أن XML هي طريقة جيدة جدًا لتخزين البيانات، ولكن مرونتها تجعل من الصعب تحليلها. وبطبيعة الحال، فإن الصعوبة المشار إليها هنا تتعلق ببطل هذه المقالة - JSON.
ما هو جسون؟ لن أكرر المفهوم في مصطلحات الشخص العادي، فهو تنسيق تخزين بيانات، تمامًا مثل سلسلة PHP المتسلسلة. إنه وصف البيانات. على سبيل المثال، إذا قمنا بإجراء تسلسل لمصفوفة وقمنا بتخزينها، فيمكن إلغاء تسلسلها وتطبيقها بسهولة. وينطبق الشيء نفسه على JSON، إلا أنه يبني جسرًا تفاعليًا بين Javascript من جانب العميل وPHP من جانب الخادم. نستخدم PHP لإنشاء سلسلة JSON، ثم نمرر هذه السلسلة إلى واجهة Javascript الأمامية، ويمكن لـ Javascirpt تحويلها بسهولة إلى JSON ثم تطبيقها. بكل بساطة، يبدو الأمر وكأنه مصفوفة.
أقرب إلى المنزل، وكيفية استخدام JSON. يحتوي PHP5.2 على دعم مدمج لـ JSON. بالطبع، إذا كان أقل من هذا الإصدار، فهناك العديد من تطبيقات إصدار PHP في السوق، فقط استخدم أي إصدار تريده. نتحدث الآن بشكل أساسي عن دعم JSON المدمج لـ PHP. بسيطة جدًا، وظيفتان: json_encode وjson_decode (تشبه إلى حد كبير التسلسل). واحد للتشفير والآخر لفك التشفير. دعونا نلقي نظرة أولاً على استخدام الترميز:
<?php
$ آر = صفيف(
'الاسم' => 'تشن يشين'،
'nick' => 'الفضاء العميق',
"جهة الاتصال" => المصفوفة(
'email' => 'shenkong at qq dot com',
'موقع الويب' => 'http://www.devdao.com',
)
);
$json_string = json_encode($arr);
صدى $json_string؛
?> من السهل جدًا إنشاء مصفوفة JSON. تجدر الإشارة إلى أنه في حالة التشفير غير UTF-8، لا يمكن تشفير الأحرف الصينية، وستكون النتيجة فارغة. لذلك، إذا كنت تستخدم gb2312 لكتابة كود PHP، فستحتاج إلى استخدام Iconv أو mb لتحويل المحتوى الذي يحتوي عليه. يتم بعد ذلك تشفير json_encoded من اللغة الصينية إلى UTF-8، وتكون نتائج الإخراج أعلاه كما يلي:
{"name": "u9648u6bc5u946b"، "nick": "u6df1u7a7a"، "الاتصال": {"email": "shenkong at qq dot com"، "موقع الويب": "http:" //www.devdao.com"}} لقد أخبرتك بالفعل أنه مشابه جدًا للتسلسل، لكنك مازلت لا تصدقه. بعد التشفير، من الضروري فك التشفير. توفر PHP الوظيفة المقابلة json_decode. بعد تنفيذ json_decode، سيتم الحصول على الكائن.
<?php
$ آر = صفيف(
'الاسم' => 'تشن يشين'،
'nick' => 'الفضاء العميق',
"جهة الاتصال" => المصفوفة(
'email' => 'shenkong at qq dot com',
'موقع الويب' => 'http://www.devdao.com',
)
);
$json_string = json_encode($arr);
$obj = json_decode($json_string);
print_r($obj);
?> هل من الممكن الوصول إلى الخصائص داخل الكائن؟ $obj->name، هكذا، بالطبع، يمكنك أيضًا تحويله إلى مصفوفة لسهولة الاتصال:
$json_string = json_encode($arr);
$obj = json_decode($json_string);
$arr = (صفيف) $obj;
print_r($arr); PHP ليس مفيدًا جدًا للتنقل. بالإضافة إلى إنشاء ذاكرة التخزين المؤقت، يبدو الأمر وكأنك تقوم بتخزين المصفوفة مباشرة، ومع ذلك، عندما تتفاعل مع مكتب الاستقبال، يظهر دورها أدناه لاستخدام Javascript لاستخدام هذا الحرف:
<scrīpt type="text/javascrīpt">
var arr = {"name": "u9648u6bc5u946b"، "nick": "u6df1u7a7a"، "الاتصال": {"email": "shenkong at qq dot com"، "website": " http://www.devdao.com"}};
تنبيه (arr.name)
</scrīpt> في ما سبق، قم بتعيين هذه السلسلة مباشرة إلى متغير، وسوف تصبح مصفوفة Javascrīpt (المصطلح المهني لا ينبغي أن يسمى مصفوفة، ولكن نظرًا لعادات PHP، أنا فقط أسميها مصفوفة من أجل الراحة. افهم ). بهذه الطريقة، يمكنك بسهولة اجتياز الوصول أو القيام بما تريد. لم أذكر أجاكس بعد، أليس كذلك؟ نعم، فكر في الأمر، إذا كان نص الاستجابة الذي أعاده الخادم يستخدم سلسلة JSON بدلاً من XML، ألن يكون من المناسب جدًا أن تقوم Javascrīpt للواجهة الأمامية بمعالجته؟ هذه هي الطريقة التي يتم بها استخدام جص جلد الكلب.
في الواقع، بينما أكتب هذا، باستثناء تنسيقات تخزين البيانات المختلفة، لا يوجد فرق كبير بين JSON وXML، لكنني سأذكر شيئًا واحدًا أدناه. على الرغم من أنها لا علاقة لها بـ XML، إلا أنها يمكن أن توضح التطبيق الأوسع لـ JSON، أي مكالمات البيانات عبر النطاقات. نظرًا لمشكلات أمنية، لا يدعم AJAX المكالمات عبر النطاقات، ومن الصعب جدًا استدعاء البيانات تحت أسماء نطاقات مختلفة. على الرغم من وجود حلول (ذكر ستون الوكلاء في محاضرته، إلا أنني لا أفهم ذلك ولكني أعرفه). يتم حلها). لقد كتبت ملفين، وهو ما يكفي لإظهار المكالمات عبر المجال.
الملف الرئيسي Index.html
<scrīpt type="text/javascrīpt">
وظيفة الحصول على الملف الشخصي (شارع) {
var arr = str;
document.getElementById('nick').innerHTML = arr.nick;
}
</script>
<body><div id="nick"></div></body>
<scrīpt type="text/javascrīpt" src=" http://www.openphp.cn/demo/profile.php"></scrīpt > ملف تعريف الملف المعدل.php
<?php
$ آر = صفيف(
'الاسم' => 'تشن يشين'،
'nick' => 'الفضاء العميق',
"جهة الاتصال" => المصفوفة(
'email' => 'shenkong at qq dot com',
'موقع الويب' => 'http://www.devdao.com',
)
);
$json_string = json_encode($arr);
صدى "getProfile($json_string)";
?> من الواضح أنه عندما يقوم ملف Index.html باستدعاء ملف Profile.php، يتم إنشاء سلسلة JSON وتمريرها إلى getProfile كمعلمة، ثم يتم إدراج اللقب في div بهذه الطريقة، يكتمل تفاعل البيانات عبر النطاق أليس الأمر بسيطًا جدًا؟ نظرًا لأن JSON بسيط جدًا وسهل الاستخدام، فماذا تنتظر؟