سؤال

لدي ASP.NET مشروع مفك 3 حيث تقوم صفحة أسبكس الرئيسية بتحميل ديناميكي لأجزائها باستخدام جكري أجاكس.لذلك أساسا عندما يتم تحميل الموقع ، فإنه يضرب / الصفحة الرئيسية /الفهرس ثم ضمن عرض الفهرس (أسبكس) ، وهناك عدة أسطر من مسج التي تجعل المكالمات أجاكس (ل/هوم /بارتون و/هوم / بارتو لملء أجزاء من الصفحة.

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

السؤال:لماذا هناك نوع من" الانتظار " الوقت لطلب الثالث لتنفيذ?اعتقدت أن هذا هو حد الطلب المتزامن للمتصفح, ولكن لماذا لا يتم تنفيذه بعد الانتهاء من الطلب 1?

عندما وضعت تجريبيا" أوتبوتكاش "السمة على" بارتو " ، فإنه يتصرف كما هو متوقع ، أنه كان ينفذ بسرعة.هذا يلمح إلى أن المشكلة ليست في إيس ، ولكن في مكان ما بعد ذلك وقبل أن يضرب طريقة العمل بلدي.

هنا لقطة شاشة من الكروم شبكة التعريف:Chrome network profiler

هنا هو لقطة الشاشة على مفمينيبروفيلر-نظرة على الصف 3 / القيمة ، فإنه ينتظر 500 مللي ثانية قبل تنفيذ رمز العمل وحدة تحكم بلدي.enter image description here

رمز وحدة التحكم الخاصة بي يشبه هذا.على الرغم من أنني قص التعليمات البرمجية الفعلية ، ولكن رمز ل بارتو هو تافهة جدا (لا حساب طويل ، لا يدعو دب، الخ):

public class HomeController : Controller {
    public ActionResult Index() {
        // do something here
        return View();
    }

    public ActionResult PartOne() {
        // do something here
        return View();
    }

    public ActionResult PartTwo() {
        // do something here
        return View();
    }
}

جافا سكريبت:

$(document).ready(function () {
    $.ajax({
        url: "/Home/PartOne",
        cache: false,
        success: function (data, textStatus, request) {
            $("#TestContainerOne").html(data);
        }
    });

    $.ajax({
        url: "/Home/PartTwo",
        cache: false,
        success: function (data, textStatus, request) {
            $("#TestContainerTwo").html(data);
        }
    });
});

فهرس بلدي.اسبكس:

<h2>Home page</h2>    
<div id="TestContainerOne"></div>
<div id="TestContainerTwo"></div>

بارتون.أسكس:

<h2>Part One</h2>

الجزء الثاني.أسكس:

<h2>Part Two</h2>

مساعدة?

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

المحلول

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

يتم ذلك عن طريق تزيين وحدة التحكم الخاصة بك مع SessionState السمة:

[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
public class HomeController : Controller {
    public ActionResult Index() {
        // do something here
        return View();
    }

    public ActionResult PartOne() {
        // do something here
        return View();
    }

    public ActionResult PartTwo() {
        // do something here
        return View();
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top