سؤال

لا أبحث حقًا عن أمثلة التعليمات البرمجية هنا، بل مجرد مفاهيم.

لدي الآن ثلاثة أقسام في الصفحة يتم تحديثها عبر ثلاث استدعاءات AJAX منفصلة لبرامج PHP النصية، والتي تُرجع JSON.ما هي أسهل طريقة لتكثيف هذه المكالمات الثلاثة في مكالمة واحدة أكبر وتلقي الردود مرة أخرى على العميل بتنسيق JSON؟كيف يمكنني فصل الردود على العميل حتى أتمكن من معالجة بيانات الاستجابة بناءً على المعلومات التي يتم إرسالها مرة أخرى؟

هل كانت مفيدة؟

المحلول

تعجبني طريقة كريس، ولكن أعتقد أنه يمكنني تقديم القليل من التحسن.نظرًا لأن لديك بالفعل 3 كيانات منفصلة، ​​لتقليل الحاجة إلى إعادة ترميز كل شيء، يمكنك القيام بشيء على غرار دمج PHP في ملف واحد عبر include 'page.php' وإرسال كائن مرة أخرى عبر JSON مع خصائص مسماة لما يفعله كل منهم (دعنا نقول "الأسماء"، و"التواريخ"، و"الأشياء الغامضة").سيحتوي رمز العميل الخاص بك لإرسال الطلب ببساطة على جميع الوسيطات التي أرسلتها وظائفك الثلاث بشكل فردي ويتم إرسالها في طلب واحد.سيبدو JSON الذي تم إرجاعه شيئًا من هذا القبيل (ضع الكائنات/المصفوفات/أي شيء في المناطق التي تم التعليق عليها):

{
    "names" : {/*stuff needed for names goes in here*/},
    "dates" : {/*stuff needed for dates goes in here*/},
    "fuzzyThings" : {/*all fuzzy things goes in here*/}
}

بمجرد وصولك إلى جانب العميل، كما أفترض أن كل منهم قد يكون لديه بالفعل وظيفة (أو مجموعة من الوظائف) للتعامل مع بيانات الإرجاع الخاصة به، يجب أن تكون قادرًا على الاتصال بهم بهذه الطريقة:

function handler(retText) {
    var returnedObject = eval(retText);

    doStuffWithNames(returnedObject.names);
    doStuffWithDates(returnedObject.dates);
    playWithFuzzyThings(returnedObject.fuzzyThings);
}

أيضًا، من ناحية PHP، يمكنك إنشاء صفحة PHP موحدة (دون إعادة ترميز أي شيء كما نأمل) عبر:

<?php
    echo '{';
        echo '"names":{';
        include 'names.php';
        echo '},';

        echo '"dates":{';
        include 'dates.php';
        echo '},';

        echo '"fuzzyThings":{';
        include 'fuzzyThings.php';
        echo '}';
    echo '}';
?>

ملحوظة: قد تحتاج إلى تعديل صفحات php الثلاث حتى يتمكنوا من التحقق من $_POST بشكل صحيح ودون التدخل في وظائف الصفحات الأخرى إذا لم تقم بذلك بالفعل، أفضل طريقة if(isset($_POST['whatever'])) { ... } للتأكد من أن كل شيء قد تم إرساله بشكل صحيح، بهذه الطريقة، يمكنك تضمين العدد الذي تريده، وإذا لم يكن هناك أي علاقة بملف php (أي ملف php).إذا كنت لا تستخدم هذا القسم في تلك الصفحة)، فسوف يعرض خاصية فارغة، ولن تستخدمها ببساطة (مما يجعلها نوعًا "مقاسًا واحدًا يناسب الجميع").

آمل أن يعمل من أجلك!

نصائح أخرى

ويمكنك تنسيق JSON الخاصة بك مثل هذا:

"user" : [ {
    "name" : "Harry",
    "hobby" : "Skating"
}, {
    "name" : "Dave",
    "hobby" : "Scuba Diving"
} ],
"news" : [ {
    "date" : "3/13/05",
    "title" : "Blah",
    "postedby" : "Mike",
} ]

والآن ردا AJAX الخاص بك:

var data = eval('('+ xhr.responseText +')'); // Ajax response
var user = data.user[0].name; // Harry
var user2 = data.user[1].name; // Dave
var title = data.news[0].title;

ويمكنك استخدام لحلقة لاجتياز البيانات. في المثال أعلاه يجب أن نرى الآن كيف يمكنك استخدام PHP لتهيئة JSON مع فئات متعددة (المستخدم، والأخبار، إلخ.) ويعود كل شيء مع مكالمة واحدة فقط. إذا كنت ترغب في الحصول على سبيل المثال أكثر تفصيلا، يرجى الرجوع إلى هذه المقالة وكذلك < وأ href = "http://www.devarticles.com/c/a/JavaScript/AJAX-with-JSON/1/" يختلط = "نوفولو noreferrer"> هذا .

وأعتقد أن لديك لجعل شكل JSON وفقا لتلك الأجزاء 3 على الصفحة، ID لهم حتى بعد استجابة يمكنك ملء لهم تلك الأجزاء.

وأنا شخصيا مثل طريقة سلمان ولكن إذا كنت جديدا على سلمان أو لا تشعر بالراحة في العمل معها لأي أسباب هناك المساعد مسج مصممة خصيصا لهذا الغرض يسمى <لأ href = "HTTP: // شبكة الاتصالات العالمية. malsup.com/jquery/taconite/ "يختلط =" نوفولو noreferrer "> مسج Taconite المساعد

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

وهذا هو workimg بالنسبة لي
كود PHP:

//for test
$categoryName = "category";
$idcategory = "1";

 $json = "{'productcategory':[{'categoryname':'".$categoryName."','idcategory':'".$idcategory."'}]}";           
 echo $json; 

وجافا سكريبت:

var str = xmlhttp.responseText.trim();
var json = JSON.stringify(eval("(" + str + ")"));
var obj = JSON.parse(json);
alert(obj.productcategory[0].idcategory);
alert(obj.productcategory[0].categoryname);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top