jQuery $ .post - من الخادم إلى العميل - كيف يعرف ما هي الاستجابة للحصول على الحصول عليها؟

StackOverflow https://stackoverflow.com/questions/3531182

  •  30-09-2019
  •  | 
  •  

سؤال

لذلك لدينا هذا:

$.post('testeUpdate.php', 'someValue'
        function(dadosResposta) {
            $('#ns-nome').val(dadosResposta.nsName);
            $('#ns-endereco').val(dadosResposta.nsAddress);
        },
"json");

من العميل إلى الخادم: يرسل "نفس القيمة" إلى testeupdate.php باستخدام Post.

عند النجاح ، يتلقى البيانات التي يتم إرجاعها بواسطة البرنامج النصي على جانب الخادم وفعل شيئًا مع ذلك على جانب العميل. صحيح؟

هناك شيء بين البرنامج النصي جانب الخادم ونص الجانب العميل الذي لا أحصل عليه.

سؤال:كيف يتم ملء Dadosresposta بالبيانات التي يتم إرجاعها من البرنامج النصي الخوادم؟ كيف تعرف؟ كيف يعمل؟ربما قد يتم طرح السؤال أيضًا: كيف يعرف jQuery متى يكون هناك شيء "على النجاح"؟

أو تجربة بطريقة أخرى: يقوم جانب الخادم بتنفيذ البرنامج النصي ، ويعيد بعض البيانات المشفرة في JSON. حتى هنا طيب. بعد هذا ، ماذا يحدث؟ كيف نقفز إلى الجزء الجانبي للعميل مرة أخرى؟

تحديث] المحاولة مرة أخرى: أعرف ذلك: يحتوي DadOsresposta على كل ما يعيد البرنامج النصي من جانب الخادم سؤالي هو، كيف هل يعرف ذلك؟ كيف يفعل ذلك؟ [/تحديث

شكرا جزيلا يا ميم

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

المحلول

jQuery .post تستخدم الوظيفة كائن XMLHTTPrequest للوصول إلى عنوان URL الذي انتقلت إليه. يستجيب الخادم إما 200 OK (النجاح) أو بعض الاستجابة الأخرى (الفشل المفترض).

عند النجاح ، يحتوي كائن XMLHTTPrequest responseText (أو responseXML) خاصية تعيين على البيانات التي تم إرجاعها بواسطة الخادم. وظيفة jQuery وراء الكواليس التي تتعامل مع الاستجابة ثم تنظر إلى الخاص بك dataType حجة لتحديد ما يجب فعله مع البيانات التي تم إرجاعها. في حالة مثالك ، يحاول تحليله في كائن.

على افتراض أن الاستجابة عبارة dadosResposta.

الذي - التي هو كيف تحصل jQuery على بياناتك dadosResposta.

يحرر:إليك بعض الكود الذي ربما يشبه بشكل غامض ما يحدث:

$.post = function([arguments])
{
    var xhr = new XMLHttpRequest(); // not cross browser compatible, but good enough for demonstration
    xhr.onreadystatechange = function()
    {
        if (xhr.readyState === 4 && xhr.status === 200)
        {
            switch (your_dataType)  // check your data type
            {
                case 'json':
                    your_callback(json_decode(xhr.responseText));    // call your function with JSON object
                    break;
                case 'xml':
                    your_callback(xhr.responseXML);    // call your function with XML
                case ... (etc)
            }
        }
    }

    xhr.open('POST', your_URL, true);
    xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    xhr.send();
}

نصائح أخرى

المعلمة في وظيفة رد الاتصال (dadosResposta في هذه الحالة) يحتوي على كل ما يعيد البرنامج النصي من جانب الخادم. على سبيل المثال ، إذا كان البرنامج النصي جانب الخادم يرجع فقط كلمة "مكتملة" في نص عادي ، dadosResposta ستكون السلسلة "completed".

في هذه الحالة بالذات ، فإن البيانات هي JSON ، والتي تسمح بتنظيم البيانات بشكل أفضل بحيث يمكن الوصول إلى حقول محددة كما في dadosResposta.nsName.

يعرف jQuery أن المكالمة كانت موجهة عندما يقوم الطلب بإرجاع رمز حالة HTTP 200. إذا فشل الخادم في معالجة الطلب ، فيجب إرجاع رمز الخطأ (IE 500).

$.post يأخذ وظيفة رد الاتصال. يأخذ رد الاتصال هذا الوسيطة ، وهي البيانات التي يتم إرجاعها من الخادم. لذلك ، في حالتك ، dadosResposta هي البيانات التي تم إرجاعها من الخادم.

إنها تعرف ما إذا كان ناجحًا أم لا بسبب رمز الحالة في رأس HTTP الذي تم إرجاعه (200 OK في هذه الحالة). يمكنك تضمين وسيطة ثانية في رد الاتصال الخاص بك والتي ستحتوي على الحالة.

تعديل: إنه يعرف أن هذه هي الطريقة التي يعمل بها jQuery. يحصل jQuery على الاستجابة ، ويمررها كمعلمة إلى رد الاتصال الخاص بك. إذا كنت تريد معرفة المزيد عن الأجزاء الداخلية ، فاقرأ ما xmlhttprequest.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top