الرابط الأصلي: http://hi.baidu.com/lostdays/blog/item/8d76c300ec4e3c15738b65fa.html
الكتالوج العام
ماذا ولماذا وكيف
ماذا
لماذا
كيفية
بناء جملة PHP التسلسل
مثال على تسلسل PHP
إجراء تسلسل إلى JSON في JavaScript - باستخدام json2.js
إجراء تسلسل إلى JSON في JavaScript - باستخدام Prototype.js
PHP مع وظيفة JSON
json_decode
وظيفة json_encode
مثال على وظيفة json_decode
توفر الممارسة
النموذجية لوظيفة json_encode
شرحًا حقيقيًا لخلفية المعرفة
جزء جافا سكريبت للواجهة الأمامية
جزء PHP الخلفي
ماذا، لماذا، كيف
؟
حسنًا، أيها الأصدقاء الأعزاء، دعونا نبدأ رحلة هذا المفهوم الجديد. ربما لم يهتم الجميع كثيرًا بموضوع التسلسل من قبل. في الواقع، لقد نشأ هذا الموضوع منذ اليوم الذي قمت فيه بتصفح دليل PHP ووجدت هذا التسلسل بعد ذلك، شعرت بالملل وقمت بإنشاء مكون إضافي لـ WordPress. في هذا الوقت، استخدمت التسلسل ووجدت أنه مناسب جدًا بالفعل في مواقف معينة.
دعونا أولاً نشرح التسلسل: ببساطة، التسلسل هو عملية تحويل المتغيرات إلى دفق بايت. يؤدي إدخال التسلسل إلى حل مشكلة تخزين الكائنات ونقلها بشكل فعال. على سبيل المثال، قمت بإنشاء كائن في JavaScript وأريد الآن حفظ هذا الكائن في قاعدة البيانات من جانب الخادم، فكيف يمكنني تشغيله هذه المرة؟ غالبًا ما يتم استخدام الكائنات. في تسلسل JavaScript، يجب أن نذكر أن JSON (JavaScript Object Notation) هو تنسيق خفيف لتبادل البيانات. من السهل على البشر القراءة والكتابة، ومن السهل على الآلات التحليل والتوليد. ويستند إلى لغة برمجة جافا سكريبت، وهي مجموعة فرعية من الإصدار الثالث القياسي ECMA-262 - ديسمبر 1999. يستخدم JSON تنسيقًا نصيًا مستقلاً تمامًا عن اللغة، ولكنه يستخدم أيضًا اصطلاحات مشابهة لعائلة لغة C (بما في ذلك C وC++ وC# وJava وJavaScript وPerl وPython وما إلى ذلك). هذه الخصائص تجعل JSON لغة مثالية لتبادل البيانات.
عادةً ما يقارن الناس بين JSON وXML، وكلاهما وسيلة لتسوية الكائنات (سنشرح هذا "التسوية" لاحقًا). يتميز XML ببنية صارمة، بينما يتميز JSON بأنه بسيط وسهل الاستخدام برنامج للتحليل، لأنه يستطيع بسهولة تحويل كائن إلى شكل دفق أحرف، مثل الكود التالي:
Code:
{"type": "human"، "name": "hanguofeng"، "age": 22 }
هو تعبير JSON يحفظ كائنًا كيف يمكننا استعادته إلى كائن؟ الأمر بسيط جدًا، كما يلي:
الكود:
var Animal_str = '{"type":human"،name": "hanguofeng"، "age": 22}'؛
var Animal2=eval('(' + Animal_str + ')');
نستخدم وظيفة تقييم JavaScript لتشغيل تعبير JSON وإرجاع القيمة للحصول على كائن. في هذه المرحلة، أعتقد أنك ستفهم بالتأكيد مثلي معجب بتفكير منشئ تنسيق JSON. كنت سأتحدث في الأصل عن التسلسل، لكنني ذكرت JSON "عن طريق الخطأ" وتحدثت عنه كثيرًا، هل خرجت عن الموضوع؟ لا، تسلسل PHP يشبه إلى حد كبير JSON. تعبير تسلسل PHP هو كما يلي:
الكود:
أ:3:{s:4:"نوع";s:5:"إنسان";s:4:"اسم";s:10:"hanguofeng";s:3:"عمر";s:2:" 20";}
يشبه هيكله إلى حد ما JSON. في الواقع، هذا التعبير هو النتيجة التسلسلية للمصفوفة التالية:
شفرة:
$الحيوان=
صفيف
(
"اكتب" => "إنسان"،
"الاسم" => "هانجو فنغ"،
"العمر" => "20"
);
حسنًا، المقدمة المذكورة أعلاه هي فقط لإعطائك فكرة تقريبية عن ماهية التسلسل وJSON، ولا تحتاج إلى التشابك مع الكود هنا، وسنشرح ذلك بالتفصيل لاحقًا استخدام التسلسل.
لماذا
ظهر التسلسل لأول مرة كوسيلة لنقل البيانات؟ عندما طرحت السؤال في بداية هذه المقالة، قمت بإنشاء كائن في JavaScript، وأريد الآن حفظ هذا الكائن في قاعدة البيانات من جانب الخادم. في الواقع، إنها مسألة "كيف يمكنني إرسال كائن من المتصفح إلى الخادم". أثناء عملية النقل هذه، نعلم أنه يمكن بالفعل نقل دفق الأحرف فقط. ولكن هناك العديد من الكائنات ولكنها متعددة الأبعاد. إذا كان الكائن المراد نقله عبارة عن سلسلة، فيمكننا استخدامه مباشرة كمحتوى منقول أحتاج إلى استخدام الأحرف لوصفه، على سبيل المثال، على الهاتف، إذا سألتك ما اسمك، ستخبرني أن اسمك هو Zhang San أو Li Si، وإذا سألتك، كيف تبدو. ، تحتاج إلى استخدام الكلمات، لقد تم وصف أن الوسيط الذي ننقل من خلاله البيانات غالبًا ما يكون هو نفسه خط الهاتف هذا، والذي يمكنه فقط نقل تدفقات الأحرف، والعملية التي نصف بها الكائنات هي في الواقع عملية تسلسل. .
بالإضافة إلى ذلك، يمكن أيضًا استخدام التسلسل للتخزين المستمر للكائنات، ربما فكرت مثلي ذات مرة في تخزين كائن في حقل معين من قاعدة البيانات، والآن يمكننا القيام بذلك بكل بساطة، ولا يحتاج حقل قاعدة البيانات الخاصة بك إلى ذلك لتعيينه على تنسيق خاص، ما عليك سوى تعيينه على varchar (بالطبع، إذا كان الكائن كبيرًا، فقد تحتاج إلى تعيينه على نص).
كيفية
بناء جملة تسلسل PHP
حسنًا، أعتقد أنك فهمت الأسئلة المتعلقة بماذا ولماذا. في نهاية هذا القسم، سنتحدث عن شيء أكثر نظرية، وهو كيفية استخدام PHP لإجراء تسلسل للبيانات وإلغاء تسلسلها، وكيفية تسلسل JavaScript. الكائنات (أي تغييرها إلى تنسيق JSON) وكيفية إلغاء تسلسلها، وأخيرًا، كيفية إنشاء علاقة بين تسلسل JSON وPHP.
توفر لنا PHP وظيفتين لعمليات التسلسل وإلغاء التسلسل، وهما: serialize(
) وunserialize(). وهما مناسبتان لـ PHP4 و
PHP5 :0.1.0-0.1.1)
سلسلة
قيمة تمثيلية قابلة للتخزين
تسلسل (قيمة $ مختلطة)
احصل على قيمة تمثيل قابلة للتخزين. تُستخدم هذه الوظيفة لتخزين أو نقل قيم وهياكل PHP المتغيرة.
إذا كنت بحاجة إلى تحويل القيمة المتسلسلة مرة أخرى إلى متغير PHP، فيمكنك استخدام الدالة unserialize().
قيمة
المعلمة
وهذا يعني أن التعبير يتم تسلسله. تتعامل الدالة serialize() مع جميع الأنواع باستثناء مؤشرات الموارد، ويمكنك حتى إجراء تسلسل لمصفوفة تحتوي على عناصر تشير إلى نفسها. ستظل المصفوفات أو الكائنات التي تقوم بتسلسلها والتي تحتوي على مؤشرات حلقة مخزنة، ولكن سيتم فقدان المؤشرات الأخرى.
عند إجراء تسلسل لكائن ما، تحاول PHP أولاً استدعاء وظيفة العضو الخاصة به __sleep(). سيسمح هذا بأشياء مثل التنظيف النهائي قبل إجراء تسلسل للكائن. وبالمثل، عند استعادة الكائن باستخدام الدالة unserialize()، سيتم استدعاء وظيفة العضو __wakeup().
القيمة المرجعة
سلسلة تحتوي على تعبير دفق بايت للكائن الذي يمكن تخزينه في أي مكان.
إلغاء التسلسل ()
(PHP 4، PHP 5، PECL axis2:0.1.0-0.1.1)
الحصول على
قيمة متغير PHP من تعبير مخزن
مختلط unserialize ( سلسلة $str )
يأخذ unserialize() نوعًا بسيطًا من المتغير المتسلسل ويحوله مرة أخرى إلى قيمة متغير PHP.
المعلمة
سلسلة
متسلسلة إذا كان المتغير الذي تم إلغاء تسلسله كائنًا، بعد استعادة بنية الكائن بنجاح، سيحاول PHP تلقائيًا تنفيذ وظيفة عضو الكائن __wakeup() (إذا كانت موجودة).
توجيه unserialize_callback_func: يمكنك ضبط وظيفة رد الاتصال ليتم تنفيذها أثناء هذه العملية، إذا كان يجب إنشاء فئة غير محددة أثناء إلغاء التسلسل (لتجنب الحصول على كائن غير مكتمل "__PHP_Incomplete_Class"). يمكنك استخدام php.ini أو ini_set() أو .htaccess لتعريف "unserialize_callback_func". يتم استدعاؤه عند إنشاء فئة غير محددة. لتعطيل هذه الميزة، ما عليك سوى ضبطها على فارغة.
القيمة المرجعة
بإرجاع القيمة المحولة، والتي قد تكون متغيرًا منطقيًا أو رقمًا حقيقيًا أو رقم النقطة العائمة أو سلسلة أو صفيفًا أو كائنًا.
إذا تعذر إلغاء تسلسل السلسلة الواردة، فسيتم إرجاع FALSE ويتم طرح خطأ NOTICE.
(ما ورد أعلاه مترجم من دليل PHP)
التسلسل وإلغاء التسلسل
لمصفوفةمثيل تسلسل PHP
حسنًا، دعنا نتعلم ذلك من خلال مثال. أولاً، يرجى إنشاء ملف Sample1.php، نستخدم العبارة التالية في هذا الملف المصفوفة:
الكود:
<?php
$الحيوان=
صفيف
(
"اكتب" => "إنسان"،
"الاسم" => "هانجو فنغ"،
"العمر" => "20"
);
?>
من أجل اختبار قيمة هذا المصفوفة، يمكنك استخدام الدالة print_r() لإخراج المصفوفة، وتكون نتائج الإخراج كما يلي:
الكود:
صفيف
(
[نوع] => إنسان
[الاسم] => هانجوفينج
[العمر] => 20
)
ثم دعونا نقوم بإجراء تسلسل لها، رمز التسلسل هو كما يلي:
الكود:
<?php
$الحيوان=
صفيف
(
"اكتب" => "إنسان"،
"الاسم" => "هانجو فنغ"،
"العمر" => "20"
);
$animal_ser=serialize($animal);
صدى($animal_ser);
?>
نحن هنا نقوم بإجراء تسلسل للمصفوفة $animal، ونحفظ السلسلة المتسلسلة التي تم إرجاعها في المتغير $animal_ser، ونخرجها، وتكون نتيجة الإخراج هي:
Code:
أ:3:{s:4:"نوع";s:5:"إنسان";s:4:"اسم";s:10:"hanguofeng";s:3:"عمر";s:2:" 20";}
دعونا ببساطة نحلل هذه السلسلة:
يشير a:3 إلى أن هذا كائن مصفوفة (a)، يحتوي على ثلاثة كائنات مضمنة (3)
الجزء الموجود داخل الأقواس عبارة عن قائمة مفصولة بفواصل من تعبيرات الكائنات. بأخذ s:4:"type" كمثال، فهو يمثل سلسلة (سلاسل) بطول 4 أرقام (4) وقيمة "type". هذا هو مفتاح العنصر الأول في مصفوفة التجزئة.
لن نخوض في التفاصيل في الأجزاء التالية. يمكنك محاولة إجراء تسلسل للكائنات المختلفة بنفسك ومعرفة كيفية إنشاء السلسلة المتسلسلة.
دعونا نلقي نظرة على إلغاء تسلسل المصفوفة، أي استعادة السلسلة المتسلسلة التي أنشأناها أعلاه إلى مصفوفة
.
<?php
$animal_ser='a:3:{s:4:"type";s:5:"human";s:4:"name";s:10:"hanguofeng";s:3:"age";s :2:"20";}';
$animal = unserialize($animal_ser);
print_r($حيوان);
?>
في السطر الأول، نفترض أن قيمة $animal_ser هي السلسلة المتسلسلة التي تم الحصول عليها أعلاه، وفي السطر الثاني، تتم استعادة السلسلة إلى مصفوفة البداية وتعيينها إلى $animal، وفي النهاية يتم إخراج المصفوفة $animal time الإخراج هو نفس إخراج المصفوفة الأصلية في بداية هذا القسم، وهو:
الكود:
صفيف
(
[نوع] => إنسان
[الاسم] => هانجوفينج
[العمر] => 20
)
بهذه الطريقة نكون قد أكملنا عملية إلغاء تسلسل المصفوفة.
توسيع المعرفة - تسلسل الكائنات المخصصة وإلغاء تسلسلها
يعد تسلسل المصفوفات عملية أساسية، ومع ذلك، في البرمجة الفعلية، قد نقوم في كثير من الأحيان بإجراء تسلسل لأنواع أخرى من المتغيرات، مثل تسلسل الكائنات المخصصة هنا فئة A كتبها بأنفسنا (تم حفظها في classa .inc):
الكود:
<?php
فئة أ {
فار $one = 1;
وظيفة show_one() {
صدى $this->one;
}
}
?>
نقوم بإنشاء مثيل للفئة وإجراء تسلسل للمثيل في الكود التالي:
Code:
<?php
include("classa.inc");
$أ=جديد أ;
صدى(تسلسل($a));
?>
محتوى الإخراج في هذا الوقت هو:
الكود:
O:1:"A":1:{s:3:"one";i:1;}
بشكل عام، تُخرج هذه السلسلة المتسلسلة الحالة الحالية للكائن، أي أن قيمة i هي 1. دعونا نحلل التفاصيل واحدة تلو الأخرى. O:1: بما أن المتغير الحالي هو كائن مخصص، فإن الحرف المميز هو "O"، وهو ما يعني "الكائن". يحدد "A" التالي الفئة التي يمثل المتغير مثيلًا لها، وهنا الفئة A. يوجد داخل الأقواس المتعرجة أسماء وقيم كل سمة من سمات المثيل. ثم نقوم بإلغاء تسلسله:
الكود:
<?php
include("classa.inc");
$s = 'O:1:"A":1:{s:3:"one";i:1;}';
$a = إلغاء التسلسل($s);
$a->show_one();
?>
في هذا الوقت، يتم إخراج "1"، أي يتم استدعاء طريقة show_one() للفئة A. يمكنك ملاحظة أنه على الرغم من أن السلسلة المتسلسلة للمثيل لا تحتوي على طريقة الفئة، فلا يزال بإمكاننا استدعاء طريقة الفئة بعد إلغاء تسلسلها. هذه الميزة مدعومة في PHP4 وما فوق (بالطبع، تحتاج إلى تضمين ملف تعريف الفئة classa.inc).
ملاحظة: يمكنك الرجوع إلى مرجع اللغة->الفئات والكائنات->تسلسل الكائنات - قسم الكائنات في الجلسات في دليل PHP.
إجراء تسلسل إلى JSON في JavaScript - باستخدام json2.js
لا توجد طريقة مضمنة لإجراء تسلسل للكائنات مباشرة في JavaScript. بالطبع يمكنك كتابة واحدة بنفسك، ولكني ما زلت أوصي بشدة بأن تكون متكاسلًا هنا وأن تستخدم مكونات JSON الجاهزة يوفر الموقع الرسمي www.json.org مكتبة أكواد لتسلسل JSON لكائنات JavaScript - json2.js، والتي يمكنك الحصول عليها من هنا.
بعد الحصول على ملف json2.js، يمكنك فتح هذا الملف. يحتوي الجزء الأول من الملف على قدر كبير من معلومات التعليقات. إذا كانت لغتك الإنجليزية جيدة بما فيه الكفاية، فيمكنك حذف هذا القسم والرجوع فقط إلى تعليقات الملف. حسنًا، إذا كنت كمبرمج قد رأيت ما يكفي من الحروف وتريد رؤية الأحرف الصينية + الحروف، فيمكنك المتابعة لأسفل.
ما عليك سوى ترجمة هذا التعليق: يرجى الرجوع إلى http://www.JSON.org/js.html يقوم هذا الملف بإنشاء كائن عالمي JSON يحتوي على طريقتين:
الكود:
JSON.stringify(القيمة، القائمة البيضاء)
قيمة أي قيمة JavaScript، عادةً ما تكون كائنًا أو مصفوفة
القائمة البيضاء معلمة صفيف اختيارية تُستخدم لتحديد كيفية إجراء تسلسل لقيمة الكائن. تقوم هذه الطريقة بإنشاء نص JSON من قيمة JavaScript. عند إجراء التسلسل، هناك ثلاثة احتمالات بناءً على القائمة البيضاء للمعلمات الاختيارية:
إذا كان الكائن يحتوي على طريقة toJSON، فاتصل بهذه الطريقة وسيتم إجراء تسلسل لقيمة الإرجاع لطريقة toJSON.
بخلاف ذلك، إذا كانت معلمة القائمة البيضاء الاختيارية عبارة عن مصفوفة، فسيتم استخدام العناصر الموجودة في المصفوفة لتحديد أعضاء الكائن للتسلسل.
بخلاف ذلك، إذا لم يتم استخدام معلمة القائمة البيضاء، فسيتم إجراء تسلسل لجميع أعضاء الكائن.
إذا كانت القيمة لا تحتوي على تمثيل JSON، مثل غير محدد أو دالة، فلن يتم إجراء تسلسل لها. في الكائنات، سيتم تجاهل هذه القيم، وفي المصفوفات سيتم استبدالها بقيم فارغة.
JSON.stringify(undef) سيُرجع غير محدد. سيتم إجراء تسلسل للتاريخ إلى تاريخ ISO المقتبس.
مثال:
الكود:
var text = JSON.stringify(['e', {pluribus: 'unum'}]);
// النص هو '["e"،{"pluribus": "unum"}]'
JSON.parse(نص، مرشح)
تقوم هذه الطريقة بتحليل نص JSON وإنشاء مكون أو مصفوفة قد تؤدي إلى استثناء SyntaxError.
معلمة التصفية الاختيارية هي وظيفة تقوم بتصفية النتائج وتحويلها، فهي تقبل كل مفتاح وقيمة، ويتم استخدام قيمة الإرجاع الخاصة بها لاستبدال القيمة المصدر. إذا أعادت القيمة المستلمة، فإن النتيجة لم تتغير. إذا عاد غير محدد، سيتم حذف العضو.
مثال:
الكود:
// تحليل النص وإذا كان المفتاح يحتوي على السلسلة "تاريخ"، فقم بتحويل قيمته إلى تاريخ
myData = JSON.parse(text, function (key, value) {
إرجاع key.indexOf('date') >= 0 تاريخ جديد(قيمة): القيمة؛
});
لقد أعطاك البرنامج التعليمي التمهيدي أعلاه فهمًا أساسيًا لكيفية استخدام json2.js، ولن أخوض في تفاصيل حول هذا الملف هنا، ولكن لدي نصيحة صغيرة إذا كنت تريد تحليل نص JSON ببساطة، فيمكنك استخدام eval () الوظيفة، الوظيفة هي وظيفة مدمجة في JavaScript، على سبيل المثال، لتحليل نص JSON الذي تم إنشاؤه في حالة JSON.stringify، يمكنك استخدام:
الكود:
var myE = eval('["e",{"pluribus":unum"}]');
للحصول على الكائن myE.
إجراء تسلسل إلى JSON في JavaScript - استخدم Prototype.js
إذا كنت مثلي وترغب في استخدام أطر عمل JavaScript مفتوحة المصدر في مشاريعك، فقد تتمكن من تخطي استخدام ملف json2.js هنا على سبيل المثال يمكن تنزيل الملف من http://www.prototypejs.org نظرًا لأن هذه المقالة لا تتعلق بإطار عمل JavaScript، أفترض هنا أن لديك بالفعل بعض الفهم لاستخدام النموذج الأولي.js.
يوفر Prototype.js طريقة toJSON لكائنات الكائن. يمكنك استخدام طريقة Object.toJSON() لتحقيق تسلسل الكائنات، على سبيل المثال:
الكود:
فار القط=
{
الاسم:"مرحبا كيتي"،
الارتفاع: "6 تفاحات"
}
تنبيه(Object.toJSON(cat));
// سيظهر مربع حوار يحتوي على المحتوى {"name": "hellokitty"، "height": "6 apples"}
بالإضافة إلى ذلك، هناك دعم إضافي لـ JSON في Prototype.js، وبشكل أساسي تحليل محتوى JSON في طلب إرجاع Ajax في كائن Ajax. وهذا لا علاقة له بالمحتوى الخاص بنا في الوقت الحالي ولن يتم تقديمه مرة أخرى.
PHP وJSON
لقد تعلمنا أعلاه عن طريقة تسلسل الكائنات في PHP وطريقة تسلسل الكائنات إلى JSON في JavaScript، ربما تتساءل عن سبب جمع الاثنين معًا، لأن بناء الجملة الخاص بهما ليس هو نفسه تمامًا في الواقع، ومع ذلك، في PHP، من الممكن إلغاء تسلسل نص JSON، ومن الممكن أيضًا إجراء تسلسل لكائنات PHP إلى JSON بدلاً من النص بنمط PHP. يتم تحقيق ذلك بشكل أساسي من خلال الوظيفتين json_decode وjson_encode. تجدر الإشارة إلى أن هاتين الوظيفتين مدعومتان فقط في PHP 5 >= 5.2.0. إذا كنت تريد كتابة برنامج يعمل في بيئة PHP4، فهاتين الوظيفتين لا يمكن استخدامها.
صيغة
وظيفة json_decode
مختلطة json_decode (سلسلة $json [، bool $assoc])
احصل على نص مشفر بـ JSON وقم بتحويله إلى
معلمة
PHP المتغيرةjson
JSON النص المشفر
مساعد
عندما تكون القيمة المرجعة TRUE عبارة عن مصفوفة ترابطية،
القيمة المرجعة
كائنًا، أو إذا كانت المعلمة assoc الاختيارية TRUE، فسيتم إرجاع مصفوفة ترابطية
json_encode
سلسلةبناء الجملة
(قيمة $ مختلطة).
قيمة
معلمة
تعبير JSON
ذات القيمة
يمكن أن تكون القيمة المراد تشفيرها أي نوع من المعلمات باستثناء المورد. تعمل هذه الوظيفة فقط بتنسيق ترميز UTF-8.
بإرجاع
نص JSON المشفر عند نجاح
المثالين
التاليين الافتراض هو أن لدينا وحدة تسجيل مستخدم تعمل بطريقة "موجهة للكائنات" في مثيل وظيفة json_decode، نقوم بتغيير معلومات تسجيل المستخدم إلى سمة فئة في المقدمة، ثم نقوم بتمريرها إلى الخلفية. php (للتبسيط، لا يتم استخدام Ajax هنا). في مثال json_encode، نشير إلى ملف js في ملف html، ويشير العنوان إلى ملف php، ونخرج كائن المستخدم المشفر بـ json في ملف php (ولتبسيط الأمر أيضًا، نقوم بإنشاء كائن مباشرة دون الحصول على المعلومات منه قاعدة البيانات)، والإخراج في HTML.
حسنًا، دعونا نلقي نظرة أولاً على صفحة الواجهة الأمامية json_encode.htm. تحاكي هذه الصفحة صفحة التسجيل المعتادة. يوجد نموذج عليها عند الإرسال، ويتم تشغيل وظيفة JavaScript، ويتم إنشاء كائن المستخدم، ومحتوى النموذج تم تعيينه على أنه سمة المستخدم، وقم بإنشاء نص JSON وتمريره إلى ملف json_encode.php في الخلفية في وضع POST. في ملف js_encode.php، استخدم وظيفة json_decode لتحليل نص JSON إلى كائن PHP وإخراجه.
حسنًا، دعونا نلقي نظرة على الملف json_encode.html أولاً، رمز الملف كما يلي:
الكود:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns=" http://www.w3.org/1999/xhtml ">
<الرأس>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>json_decode</title>
<script src="json2.js" type="text/javascript"></script>
<نوع البرنامج النصي = "نص/جافا سكريبت">
وظيفة JSON_test(س){
فار المستخدم = {
الاسم:document.getElementById('txt_name').القيمة،
البريد الإلكتروني:document.getElementById('txt_email').قيمة،
كلمة المرور:document.getElementById('txt_name').القيمة
}
var json_string = JSON.stringify(user
document.getElementById('txt_json').value=json_string;
تنبيه("انقر فوق موافق لإرسال النموذج");
o.submit();
}
</script>
</الرأس>
<الجسم>
<form id = "form1" name = "form1"method = "post" action = "json_encode.php" onsubmit = "JSON_test (this)">
<label for="txt_name">الاسم</label>
<ص>
<نوع الإدخال = "نص" اسم = "txt_name" معرف = "txt_name" />
</ص>
<label for="txt_email">البريد الإلكتروني</label>
<ص>
<نوع الإدخال = "نص" اسم = "txt_email" معرف = "txt_email" />
</ص>
<ص>
<label for="txt_password">كلمة المرور</label>
</ص>
<ص>
<نوع الإدخال = "نص" اسم = "txt_password" معرف = "txt_password" />
</ص>
<ص>
<نوع الإدخال = "نص" اسم = "txt_json" معرف = "txt_json" />
<تسمية for="button"></label>
<input type = "submit" name = "button" id = "button" value = "JSON" />
</ص>
</النموذج>
</الجسم>
</html>
عند إرسال النموذج، سيتم تشغيل وظيفة JavaScript JSON_text(). تقوم هذه الوظيفة أولاً بإنشاء مستخدم كائن JavaScript، وتعيين سمات الاسم والبريد الإلكتروني وكلمة المرور الخاصة به على قيم النموذج المقابل، ثم تستخدم JSON.stringify. طريقة ملف json2.js لتحويله إلى نص JSON json_string، وأخيراً تم تعيين الحقل المخفي (لتوضيح الأمر هنا، أعرض هذا الحقل المخفي على شكل مربع نص) قيمة txt_json هي json_string، ويتم تقديم النموذج.
انتقل بعد ذلك إلى ملف json_encode.php، كما يلي
:
<?php
$json_string = $_POST["txt_json"];
إذا (ini_get("magic_quotes_gpc")=="1")
{
$json_string=stripslashes($json_string);
}
$user = json_decode($json_string);
صدى var_dump($user);
?>
في هذا الملف، احصل أولاً على قيمة حقل نموذج POST txt_json في ملف json_encode.html، ثم ضعها في المتغير $json_string، ثم احكم على ما إذا كان إعداد PHP الحالي هو magic_quotes_gpc=On، أي علامات الاقتباس المزدوجة الواردة سيتم تحويله بمعنى أن وظيفة json_decode لا يمكنها تحليله، لذلك نحتاج إلى إلغاء تخطيه. بعد ذلك، استخدم الدالة json_decode لتحويل نص JSON إلى كائن، وحفظه في المتغير $user، وأخيرًا استخدم echo var_dump($user)
;
كائن (ستد كلاس) # 1 (3) {
["الاسم"]=>
السلسلة (10) "hanguofeng"
["البريد الإلكتروني"]=>
سلسلة (18) " [email protected] "
["كلمة المرور"]=>
السلسلة (10) "hanguofeng"
}
مثيل الدالة json_encode
مكونًا من جزأين، وهما json_enode.html وjson_encode.php. في ملف json_decode.html، يكون النموذج مشابهًا بشكل أساسي لملف json_decode.html، لكن الفرق هو أننا نريد هذه المرة الحصول على نص JSON للمستخدم المقابل من ملف json_encode.php، فلنلقِ نظرة على ملف PHP هذا أولا:
الكود:
<?php
مستخدم الفئة {
اسم $ عام = ""؛
البريد الإلكتروني العام = ""؛
كلمة المرور العامة $ = ""؛
};
$myUser = مستخدم جديد؛
$myUser->name="hanguofeng";
$myUser->email=" [email protected] ";
$myUser->password="hanguofeng";
$json_string = json_encode($myUser);
?>
var user = <?php echo($json_string)?>;
يقوم هذا الملف أولاً بإنشاء مستخدم الفئة، ثم يحصل على مثيل لفئة المستخدم myUser، ويقوم بتعيين اسم المستخدم والبريد الإلكتروني وكلمة المرور الخاصة به، ثم يستخدم وظيفة json_encode لتحويله إلى نص JSON، وحفظه في المتغير $json_string، وأخيرًا. يقوم بإخراج جزء من كود JavaScript لإنشاء المستخدم المتغير العام في JavaScript.
بعد ذلك، نحتاج إلى إدخال ملف json_encode.php في ملف json_encode.html والحصول على السمات المختلفة لكائن المستخدم، كما يلي:
الكود:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns=" http://www.w3.org/1999/xhtml ">
<الرأس>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>json_encode</title>
<script src="json_encode.php" type="text/javascript"></script>
</الرأس>
<الجسم>
<معرف النموذج = "form1" name = "form1" طريقة = "post">
<label for="txt_name">الاسم</label>
<ص>
<نوع الإدخال = "نص" اسم = "txt_name" معرف = "txt_name" />
</ص>
<label for="txt_email">البريد الإلكتروني</label>
<ص>
<نوع الإدخال = "نص" اسم = "txt_email" معرف = "txt_email" />
</ص>
<ص>
<label for="txt_password">كلمة المرور</label>
</ص>
<ص>
<نوع الإدخال = "نص" اسم = "txt_password" معرف = "txt_password" />
</ص>
</النموذج>
<نوع البرنامج النصي = "نص/جافا سكريبت">
document.getElementById('txt_name').value=user.name;
document.getElementById('txt_email').value=user.email;
document.getElementById('txt_password').value=user.password;
</script>
</الجسم>
</html>
في هذا الملف عليك الانتباه إلى نقطتين الأولى هي أننا نقدم ملف json_encode.php كملف JavaScript بهذا الكود:
Code:
<script src="json_encode.php" type="text/javascript"></script>
النقطة الثانية هي:
نضيف كود JavaScript بعد رمز مربع النص، ونقوم بتشغيل سمة القيمة لمربع النص، ونضبط قيمته على القيمة المقابلة لكائن المستخدم.