لا يبدو AJAX الاقتراع لURL عودته JSON للعودة ردود جديدة (طريقة استخدام مسج $ .ajax ())

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

سؤال

ومشروعي يتطلب اقتراع URL معين لاستجابة JSON، وذلك باستخدام AJAX. طلب AJAX الأولى التي تجعل التنبيهات الملقم الذي أريد بعض المحتويات JSON، وأنه يبدأ بناء وcacheing ردا على ذلك، ترسل لي مرة أخرى <م> { "المركز": "انتظار"} لكل طلب AJAX لاحق حتى JSON جاهز. عند هذه النقطة، فإن التغييرات استجابة لJSON أن يتضمن المحتوى الذي يمكنني تحليل وعرض في الوثيقة، التي أريد القيام به بمجرد URL بإرجاع أي شيء آخر غير <م> { "المركز": "انتظار"} .

ولقد أنشئت وظيفة الاقتراع الذي يعمل كما هو متوقع لطلب مرارا JSON من URL. ومع ذلك، فإن المشكلة هي أنه لا يزال للحصول على استجابة <م> { "المركز": "انتظار"} حتى عندما كنت التنقل مباشرة إلى URL، ويمكن أن نرى أن استجابة JSON كاملة جاهزة ويجري خدم . لسبب ما، بلدي وظيفة الاقتراع لا تزال تحصل <م> { "المركز": "انتظار"}.

وعندما تحديث الصفحة يحتوي على التعليمات البرمجية الاقتراع، وأنها تعمل بشكل عام على الطلب الأول - أي أنه يحصل على استجابة JSON الكاملة. هذا يقودني إلى الاعتقاد أنه نوعا من قضية التخزين المؤقت، ولكن لست متأكدا من أين أو لماذا. لا يجب على كل طلب AJAX الحصول على استجابة جديدة، أم أن هذا شيء لا يمكن اقامة في بلدي <م> $. اياكس () دعوة

وهنا هو رمز أنا باستخدام الآن:

function ajax_poll() {
  $.ajax({
    url: JSON_URL, // JSON_URL is a string containing the URL to poll
    dataType: 'json',
    error: function(xhr_data) {
      display_error();
    },
    success: function(xhr_data) {
      if (xhr_data.status == 'pending') {
        poll++; // increment poll counter // poll is a global variable to track the number of requests made
        if (poll < POLLS) { // POLLS is a global variable to set the maximum number of requests
          setTimeout(function() { ajax_poll(); }, INTERVAL); // wait INTERVAL before another AJAX request
        } else {
          display_error();
        }
      } else {
        success(xhr_data);
      }
    },
    contentType: 'application/json'
  });
}

نجاح () هي وظيفة التي تعرض محتوى JSON (أي ما أنا في انتظار أن تصبح متوفرة أثناء الاقتراع) على الصفحة.

وشيء واحد الجدير بالذكر هو أن أثناء اختبار رمز محليا، والاقتراع ملف اختبار و. json المحلي، يمكنني تغيير محتويات الملف من { "المركز": "انتظار"} إلى استجابة تحتوي على المحتوى مثل أنا أبحث عن وحفظ الملف بين الحالات الاقتراع، وعلى الاستطلاع المقبل، قانون بلدي يرى محتوى جديد ويعمل كما هو متوقع. انها فقط لا يعمل في بيئة التدريج.

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

المحلول

وأنت قد حاول إضافة خيار "cache: false" .

نصائح أخرى

وفقط لوصف السبب المحتمل لماذا هذا يحدث: ربما كنت إصدار طلبات GET AJAX، ولكن لا يتم التمييز بين URL بأي شكل من الأشكال (لا توجد بيانات إضافية في سلسلة الاستعلام، على سبيل المثال)

والمتصفح يرى هذا الطلب وحتى لا يكلف نفسه عناء لتصل إلى الملقم مع الطلب الكامل (وربما يصدر مشروطة 304 طلبات GET بدلا من ذلك). النتيجة النهائية لهذا كله هو أنك لا نرى النشاط الذي نتوقع أن نرى.

وهناك طريقة بسيطة لحل هذه المشكلة هي عدم تخزين نتائج طلب AJAX أو إرسال طلب POST. تؤثر خيارات مخبأ تتم تغطيتها في وظائف أخرى. المشكلة مع نهج المنصب هو أنك لا إنقاذ أي شيء عن طريق الإجراءات الخاصة بك، وهكذا كنت معربا عن نواياكم أفضل مع طلب GET.

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