لا يبدو AJAX الاقتراع لURL عودته JSON للعودة ردود جديدة (طريقة استخدام مسج $ .ajax ())
-
06-07-2019 - |
سؤال
ومشروعي يتطلب اقتراع 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 المحلي، يمكنني تغيير محتويات الملف من { "المركز": "انتظار"} م> إلى استجابة تحتوي على المحتوى مثل أنا أبحث عن وحفظ الملف بين الحالات الاقتراع، وعلى الاستطلاع المقبل، قانون بلدي يرى محتوى جديد ويعمل كما هو متوقع. انها فقط لا يعمل في بيئة التدريج.
نصائح أخرى
وفقط لوصف السبب المحتمل لماذا هذا يحدث: ربما كنت إصدار طلبات GET AJAX، ولكن لا يتم التمييز بين URL بأي شكل من الأشكال (لا توجد بيانات إضافية في سلسلة الاستعلام، على سبيل المثال)
والمتصفح يرى هذا الطلب وحتى لا يكلف نفسه عناء لتصل إلى الملقم مع الطلب الكامل (وربما يصدر مشروطة 304 طلبات GET بدلا من ذلك). النتيجة النهائية لهذا كله هو أنك لا نرى النشاط الذي نتوقع أن نرى.
وهناك طريقة بسيطة لحل هذه المشكلة هي عدم تخزين نتائج طلب AJAX أو إرسال طلب POST. تؤثر خيارات مخبأ تتم تغطيتها في وظائف أخرى. المشكلة مع نهج المنصب هو أنك لا إنقاذ أي شيء عن طريق الإجراءات الخاصة بك، وهكذا كنت معربا عن نواياكم أفضل مع طلب GET.